ZG5sIApkbmwgICRJZCQKZG5sIApkbmwgIENvcHlyaWdodCCpIDIwMDMgS2VpdGggUGFja2FyZApkbmwgCmRubCAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCmRubCAgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKZG5sICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKZG5sICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCmRubCAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgS2VpdGggUGFja2FyZCBub3QgYmUgdXNlZCBpbgpkbmwgIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dApkbmwgIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBLZWl0aCBQYWNrYXJkIG1ha2VzIG5vCmRubCAgcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0CmRubCAgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KZG5sIApkbmwgIEtFSVRIIFBBQ0tBUkQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCmRubCAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwpkbmwgIEVWRU5UIFNIQUxMIEtFSVRIIFBBQ0tBUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKZG5sICBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKZG5sICBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCmRubCAgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgpkbmwgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRubApkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBjcmVhdGUgY29uZmlndXJlLgoKQUNfSU5JVChmb250cy5kdGQpCgpkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb25pbmcgICAgICAgICAgICAgIApkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmRubCBUaGlzIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gbnVtYmVyLCBub3QgdGhlIHNoYXJlZCBsaWJyYXJ5CmRubCB2ZXJzaW9uLiAgVGhpcyBzYW1lIHZlcnNpb24gbnVtYmVyIG11c3QgYXBwZWFyIGluIGZvbnRjb25maWcvZm9udGNvbmZpZy5oCmRubCBZZXMsIGl0IGlzIGEgcGFpbiB0byBzeW5jaHJvbml6ZSB2ZXJzaW9uIG51bWJlcnMuICBVbmZvcnR1bmF0ZWx5LCBpdCdzCmRubCBub3QgcG9zc2libGUgdG8gZXh0cmFjdCB0aGUgdmVyc2lvbiBudW1iZXIgaGVyZSBmcm9tIGZvbnRjb25maWcuaApBTV9JTklUX0FVVE9NQUtFKGZvbnRjb25maWcsIDIuMi45NSkKQU1fTUFJTlRBSU5FUl9NT0RFCgpkbmwgbGlidG9vbCB2ZXJzaW9uaW5nCgpMVF9DVVJSRU5UPTEKTFRfUkVWSVNJT049NApBQ19TVUJTVChMVF9DVVJSRU5UKQpBQ19TVUJTVChMVF9SRVZJU0lPTikKTFRfQUdFPTAKCkxUX1ZFUlNJT05fSU5GTz0iJExUX0NVUlJFTlQ6JExUX1JFVklTSU9OOiRMVF9BR0UiCkFDX1NVQlNUKExUX1ZFUlNJT05fSU5GTykKCkxUX0NVUlJFTlRfTUlOVVNfQUdFPWBleHByICRMVF9DVVJSRU5UIC0gJExUX0FHRWAKQUNfU1VCU1QoTFRfQ1VSUkVOVF9NSU5VU19BR0UpCgpkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCgpBQ19QUk9HX0NDCkFDX1BST0dfSU5TVEFMTApBQ19QUk9HX0xOX1MKQUNfTElCVE9PTF9XSU4zMl9ETEwKQU1fUFJPR19MSUJUT09MCkFDX1BST0dfTUFLRV9TRVQKCmRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKY2FzZSAiJGhvc3QiIGluCiAgKi0qLW1pbmd3KikKICAgIG9zX3dpbjMyPXllcwogICAgOzsKICAqKQogICAgb3Nfd2luMzI9bm8KZXNhYwpBTV9DT05ESVRJT05BTChPU19XSU4zMiwgdGVzdCAiJG9zX3dpbjMyIiA9ICJ5ZXMiKQoKaWYgdGVzdCAiJG9zX3dpbjMyIiA9ICJ5ZXMiOyB0aGVuCiAgQUNfQ0hFQ0tfUFJPRyhtc19saWJyYXJpYW4sIGxpYi5leGUsIHllcywgbm8pCmZpCkFNX0NPTkRJVElPTkFMKE1TX0xJQl9BVkFJTEFCTEUsIHRlc3QgeCRtc19saWJyYXJpYW4gPSB4eWVzKQoKV0FSTl9DRkxBR1M9IiIKCmlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgoJV0FSTl9DRkxBR1M9Ii1XYWxsIC1XcG9pbnRlci1hcml0aCAtV3N0cmljdC1wcm90b3R5cGVzIFwKCS1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgXAoJLVduZXN0ZWQtZXh0ZXJucyAtZm5vLXN0cmljdC1hbGlhc2luZyIKZmkKQUNfU1VCU1QoV0FSTl9DRkxBR1MpCgpkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCkFDX0hFQURFUl9ESVJFTlQKQUNfSEVBREVSX1NUREMKQUNfQ0hFQ0tfSEVBREVSUyhbZmNudGwuaCBzdGRsaWIuaCBzdHJpbmcuaCB1bmlzdGQuaF0pCgojIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCkFDX0NfQ09OU1QKQUNfVFlQRV9QSURfVAoKIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgpBQ19GVU5DX1ZQUklOVEYKQUNfQ0hFQ0tfRlVOQ1MoW2dldGV1aWQgZ2V0dWlkIGxpbmsgbWVtbW92ZSBtZW1zZXQgbWtzdGVtcCBzdHJjaHIgc3RycmNociBzdHJ0b2wgZ2V0b3B0IGdldG9wdF9sb25nXSkKCiMKIyBDaGVja3MgZm9yIEZyZWVUeXBlCiMKCkFDX0FSR19XSVRIKGZyZWV0eXBlLWNvbmZpZywgWyAgLS13aXRoLWZyZWV0eXBlLWNvbmZpZz1QUk9HICAgVXNlIEZyZWVUeXBlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSBQUk9HXSwgZnJlZXR5cGVfY29uZmlnPSR3aXRodmFsLCBmcmVldHlwZV9jb25maWc9eWVzKQoKaWYgdGVzdCAiJGZyZWV0eXBlX2NvbmZpZyIgPSAieWVzIjsgdGhlbiAKCUFDX1BBVEhfUFJPRyhmdF9jb25maWcsZnJlZXR5cGUtY29uZmlnLG5vKQoJaWYgdGVzdCAiJGZ0X2NvbmZpZyIgPSAibm8iOyB0aGVuCgkJQUNfTVNHX0VSUk9SKFtZb3UgbXVzdCBoYXZlIGZyZWV0eXBlIGluc3RhbGxlZDsgc2VlIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnL10pCglmaQplbHNlCglmdF9jb25maWc9IiRmcmVldHlwZV9jb25maWciCmZpCgpGUkVFVFlQRV9DRkxBR1M9ImAkZnRfY29uZmlnIC0tY2ZsYWdzYCIKRlJFRVRZUEVfTElCUz0iYCRmdF9jb25maWcgLS1saWJzYCIKCkFDX1NVQlNUKEZSRUVUWVBFX0xJQlMpCkFDX1NVQlNUKEZSRUVUWVBFX0NGTEFHUykKCiMKIyBDaGVjayB0byBzZWUgd2hldGhlciB3ZSBoYXZlOgojICBGVF9HZXRfTmV4dF9DaGFyCiMgIEZUX0dldF9CREZfUHJvcGVydHkKIyAgRlRfR2V0X1BTX0ZvbnRfSW5mbwojICBGVF9IYXNfUFNfR2x5cGhfTmFtZXMKIwoKZm9udGNvbmZpZ19zYXZlX2xpYnM9IiRMSUJTIgpmb250Y29uZmlnX3NhdmVfY2ZsYWdzPSIkQ0ZMQUdTIgpMSUJTPSIkTElCUyAkRlJFRVRZUEVfTElCUyIKQ0ZMQUdTPSIkQ0ZMQUdTICRGUkVFVFlQRV9DRkxBR1MiCkFDX0NIRUNLX0ZVTkNTKEZUX0dldF9OZXh0X0NoYXIgRlRfR2V0X0JERl9Qcm9wZXJ0eSBGVF9HZXRfUFNfRm9udF9JbmZvIEZUX0hhc19QU19HbHlwaF9OYW1lcykKQUNfQ0hFQ0tfTUVNQkVSKEZUX0JpdG1hcF9TaXplLnlfcHBlbSwKCQlIQVZFX0ZUX0JJVE1BUF9TSVpFX1lfUFBFTT0xLAoJCUhBVkVfRlRfQklUTUFQX1NJWkVfWV9QUEVNPTAsClsjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KI2luY2x1ZGUgRlRfRlJFRVRZUEVfSF0pCkFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZUX0JJVE1BUF9TSVpFX1lfUFBFTSwkSEFWRV9GVF9CSVRNQVBfU0laRV9ZX1BQRU0sCgkJICAgW0ZUX0JpdG1hcF9TaXplIHN0cnVjdHVyZSBpbmNsdWRlcyB5X3BwZW0gZmllbGRdKQpDRkxBR1M9IiRmb250Y29uZmlnX3NhdmVfY2ZsYWdzIgpMSUJTPSIkZm9udGNvbmZpZ19zYXZlX2xpYnMiCgojCiMgQ2hlY2sgZXhwYXQgY29uZmlndXJhdGlvbgojCgpBQ19BUkdfV0lUSChleHBhdCwgICAgICAgICAgICAgWyAgLS13aXRoLWV4cGF0PURJUiAgICAgICAgICAgICAgVXNlIEV4cGF0IGluIERJUl0sIGV4cGF0PSR3aXRodmFsLCBleHBhdD15ZXMpCkFDX0FSR19XSVRIKGV4cGF0LWluY2x1ZGVzLCAgICBbICAtLXdpdGgtZXhwYXQtaW5jbHVkZXM9RElSICAgICBVc2UgRXhwYXQgaW5jbHVkZXMgaW4gRElSXSwgZXhwYXRfaW5jbHVkZXM9JHdpdGh2YWwsIGV4cGF0X2luY2x1ZGVzPXllcykKQUNfQVJHX1dJVEgoZXhwYXQtbGliLCAgICAgICAgIFsgIC0td2l0aC1leHBhdC1saWI9RElSICAgICAgICAgIFVzZSBFeHBhdCBsaWJyYXJ5IGluIERJUl0sIGV4cGF0X2xpYj0kd2l0aHZhbCwgZXhwYXRfbGliPXllcykKCmNhc2UgIiRleHBhdCIgaW4Kbm8pCgk7OwoqKQoJY2FzZSAiJGV4cGF0X2luY2x1ZGVzIiBpbgoJeWVzfG5vKQoJCUVYUEFUX0NGTEFHUz0iIgoJCTs7CgkqKQoJCUVYUEFUX0NGTEFHUz0iLUkkZXhwYXRfaW5jbHVkZXMiCgkJOzsKCWVzYWMKCWNhc2UgIiRleHBhdF9saWIiIGluCgl5ZXMpCgkJY2FzZSAiJGV4cGF0IiBpbgoJCXllcykKCQkJRVhQQVRfTElCUz0iLWxleHBhdCIKCQkJOzsKCQkqKQoJCQlFWFBBVF9MSUJTPSItTCRleHBhdC9saWIgLWxleHBhdCIKCQkJOzsKCQllc2FjCgkJOzsKCW5vKQoJCTs7CgkqKQoJCUVYUEFUX0xJQlM9Ii1MJGV4cGF0X2xpYiAtbGV4cGF0IgoJCTs7Cgllc2FjCgoJZXhwYXRzYXZlZF9DUFBGTEFHUz0iJENQUEZMQUdTIgoJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkRVhQQVRfQ0ZMQUdTIgoJZXhwYXRzYXZlZF9MSUJTPSIkTElCUyIKCUxJQlM9IiRMSUJTICRFWFBBVF9MSUJTIgoKCUFDX0NIRUNLX0hFQURFUihleHBhdC5oKQoJY2FzZSAiJGFjX2N2X2hlYWRlcl9leHBhdF9oIiBpbgoJbm8pCgkJQUNfQ0hFQ0tfSEVBREVSKHhtbHBhcnNlLmgpCgkJY2FzZSAiJGFjX2N2X2hlYWRlcl94bWxwYXJzZV9oIiBpbgoJCW5vKQoJCQloYXZlX2V4cGF0X2hlYWRlcj1ubzsKCQkJOzsKCQl5ZXMpCgkJCUhBVkVfWE1MUEFSU0VfSD0xCgkJCUFDX1NVQlNUKEhBVkVfWE1MUEFSU0VfSCkKCQkJQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfWE1MUEFSU0VfSCwkSEFWRV9YTUxQQVJTRV9ILAoJCQlbVXNlIHhtbHBhcnNlLmggaW5zdGVhZCBvZiBleHBhdC5oXSkKCQkJaGF2ZV9leHBhdF9oZWFkZXI9eWVzCgkJCTs7CgkJZXNhYwoJCTs7Cgl5ZXMpCgkJaGF2ZV9leHBhdF9oZWFkZXI9eWVzCgkJOzsKCWVzYWMKCWNhc2UgIiRoYXZlX2V4cGF0X2hlYWRlciIgaW4KCW5vKQoJCWV4cGF0PW5vCgkJOzsKCXllcykKCQlBQ19DSEVDS19GVU5DUyhYTUxfU2V0RG9jdHlwZURlY2xIYW5kbGVyKQoJCWNhc2UgIiRhY19jdl9mdW5jX1hNTF9TZXREb2N0eXBlRGVjbEhhbmRsZXIiIGluCgkJeWVzKQoJCQlIQVZFX0VYUEFUPTEKCQkJQUNfU1VCU1QoSEFWRV9FWFBBVCkKCQkJQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRVhQQVQsJEhBVkVfRVhQQVQsCgkJCVtGb3VuZCBhIHVzZWFibGUgZXhwYXQgbGlicmFyeV0pCgkJCTs7CgkJKikKCQkJZXhwYXQ9bm8KCQkJOzsKCQllc2FjCgkJOzsKCWVzYWMKCUNQUEZMQUdTPSIkZXhwYXRzYXZlZF9DUFBGTEFHUyIKCUxJQlM9IiRleHBhdHNhdmVkX0xJQlMiCgk7Owplc2FjCkFDX1NVQlNUKEVYUEFUX0xJQlMpCkFDX1NVQlNUKEVYUEFUX0NGTEFHUykKCQpjYXNlICIkZXhwYXQiIGluCm5vKQoJQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCB1c2FibGUgZXhwYXQgbGlicmFyeS4gVGhpcyBjb3VsZCBtZWFuIHRoYXQgeW91ciB2ZXJzaW9uIGlzIHRvbyBvbGQuXSkKCTs7CmVzYWMKCiMKIyBTZXQgZGVmYXVsdCBmb250IGRpcmVjdG9yeQojCgpBQ19BUkdfV0lUSChkZWZhdWx0LWZvbnRzLCAgICAgWyAgLS13aXRoLWRlZmF1bHQtZm9udHM9RElSICAgICAgVXNlIGZvbnRzIGZyb20gRElSIHdoZW4gY29uZmlnIGlzIGJ1c3RlZF0sIGRlZmF1bHRfZm9udHM9IiR3aXRodmFsIiwgZGVmYXVsdF9mb250cz15ZXMpCgpjYXNlICIkZGVmYXVsdF9mb250cyIgaW4KeWVzKQoJaWYgdGVzdCAiJG9zX3dpbjMyIiA9ICJ5ZXMiOyB0aGVuCgkJRkNfREVGQVVMVF9GT05UUz0iV0lORE9XU0ZPTlRESVIiCgkJQUNfREVGSU5FX1VOUVVPVEVEKEZDX0RFRkFVTFRfRk9OVFMsICJXSU5ET1dTRk9OVERJUiIsIAoJCQkJICAgW1dpbmRvd3MgZm9udCBkaXJlY3RvcnldKQoJZWxzZQoJCUZDX0RFRkFVTFRfRk9OVFM9Ii91c3Ivc2hhcmUvZm9udHMiCgkJQUNfREVGSU5FX1VOUVVPVEVEKEZDX0RFRkFVTFRfRk9OVFMsICIvdXNyL3NoYXJlL2ZvbnRzIiwgCgkJCQkgICBbU3lzdGVtIGZvbnQgZGlyZWN0b3J5XSkKCWZpCgk7OwoqKQoJRkNfREVGQVVMVF9GT05UUz0iJGRlZmF1bHRfZm9udHMiCglBQ19ERUZJTkVfVU5RVU9URUQoRkNfREVGQVVMVF9GT05UUywgIiRkZWZhdWx0X2ZvbnRzIiwKCQkJICAgW1N5c3RlbSBmb250IGRpcmVjdG9yeV0pCgk7Owplc2FjCgpBQ19TVUJTVChGQ19ERUZBVUxUX0ZPTlRTKQoKIwojIEFkZCBtb3JlIGZvbnRzIGlmIGF2YWlsYWJsZS4gIEJ5IGRlZmF1bHQsIGFkZCBvbmx5IHRoZSBkaXJlY3RvcmllcwojIHdpdGggb3V0bGluZSBmb250czsgdGhvc2Ugd2l0aCBiaXRtYXBzIGNhbiBiZSBhZGRlZCBhcyBkZXNpcmVkIGluCiMgbG9jYWwuY29uZiBvciB+Ly5mb250cy5jb25mCiMKQUNfQVJHX1dJVEgoYWRkLWZvbnRzLCAgICAgICAgWyAgLS13aXRoLWFkZC1mb250cz1ESVIxLERJUjIsLi4uRmluZCBhZGRpdGlvbmFsIGZvbnRzIGluIERJUjEsRElSMiwuLi4gXSwgYWRkX2ZvbnRzPSIkd2l0aHZhbCIsIGFkZF9mb250cz15ZXMpCgpjYXNlICIkYWRkX2ZvbnRzIiBpbgp5ZXMpCglGQ19BRERfRk9OVFM9IiIKCWZvciBkaXIgaW4gL3Vzci9YMTFSNi9saWIvWDExIC91c3IvWDExL2xpYi9YMTEgL3Vzci9saWIvWDExOyBkbwoJCWNhc2UgeCIkRkNfQUREX0ZPTlRTIiBpbgoJCXgpCgkJCWlmIHRlc3QgLWQgIiRkaXIvZm9udHMiOyB0aGVuCgkJCQlmb3Igc3ViIGluICIkZGlyIi9mb250cy8qOyBkbwoJCQkJCWlmIGxzICIkc3ViIiB8IGdyZXAgLXEgLWkgJ1wucGZcfFwudHRcfFwub3QnOyB0aGVuCgkJCQkJCWNhc2UgeCRGQ19BRERfRk9OVFMgaW4KCQkJCQkJeCkKCQkJCQkJCUZDX0FERF9GT05UUz0iJHN1YiIKCQkJCQkJCTs7CgkJCQkJCSopCgkJCQkJCQlGQ19BRERfRk9OVFM9IiRGQ19BRERfRk9OVFMsJHN1YiIKCQkJCQkJCTs7CgkJCQkJCWVzYWMKCQkJCQlmaQoJCQkJZG9uZQoJCQlmaQoJCQk7OwoJCWVzYWMKCWRvbmUKCUFDX0RFRklORV9VTlFVT1RFRChGQ19BRERfRk9OVFMsIiRhZGRfZm9udHMiLFtBZGRpdGlvbmFsIGZvbnQgZGlyZWN0b3JpZXNdKQoJOzsKbm8pCglGQ19BRERfRk9OVFM9IiIKCTs7CiopCglGQ19BRERfRk9OVFM9IiRhZGRfZm9udHMiCglBQ19ERUZJTkVfVU5RVU9URUQoRkNfQUREX0ZPTlRTLCIkYWRkX2ZvbnRzIixbQWRkaXRpb25hbCBmb250IGRpcmVjdG9yaWVzXSkKCTs7CmVzYWMKCkFDX1NVQlNUKEZDX0FERF9GT05UUykKCkZDX0ZPTlRQQVRIPSIiCgpjYXNlICIkRkNfQUREX0ZPTlRTIiBpbgoiIikKCTs7CiopCglGQ19GT05UUEFUSD1gZWNobyAkRkNfQUREX0ZPTlRTIHwgCgkJCXNlZCAtZSAncy9eLzxkaXI+LycgLWUgJ3MvJC88XC9kaXI+LycgLWUgJ3MvLC88XC9kaXI+IDxkaXI+L2cnYAoJOzsKZXNhYwoKQUNfU1VCU1QoRkNfRk9OVFBBVEgpCgpGQ19GT05UREFURT1gZGF0ZWAKCkFDX1NVQlNUKEZDX0ZPTlREQVRFKQoKQUNfQVJHX1dJVEgoY29uZmRpciwgICAgICAgICAgIFsgIC0td2l0aC1jb25mZGlyPURJUiAgICAgICAgICAgIFVzZSBESVIgdG8gc3RvcmUgY29uZmlndXJhdGlvbiBmaWxlcyAoZGVmYXVsdCAvZXRjL2ZvbnRzKV0sIGNvbmZkaXI9IiR3aXRodmFsIiwgY29uZmRpcj15ZXMpCgojCiMgU2V0IENPTkZESVIgYW5kIEZPTlRDT05GSUdfUEFUSAojCgpjYXNlICIkY29uZmRpciIgaW4Kbm98eWVzKQoJY29uZmRpcj0nJHtzeXNjb25mZGlyfScvZm9udHMKCTs7CiopCgk7Owplc2FjCkFDX1NVQlNUKGNvbmZkaXIpCkNPTkZESVI9JHtjb25mZGlyfQpBQ19ERUZJTkVfVU5RVU9URUQoQ09ORkRJUiwgIiRDT05GRElSIixbRm9udCBjb25maWd1cmF0aW9uIGRpcmVjdG9yeV0pCkFDX1NVQlNUKENPTkZESVIpCgojCiMgRmluZCBvdXQgd2hhdCBsYW5ndWFnZSBvcnRob2dyYXBoaWVzIGFyZSBpbmNsdWRlZAojCgpPUlRIX0ZJTEVTPWBjZCAke3NyY2Rpcn0vZmMtbGFuZyAmJiBlY2hvICoub3J0aGAKQUNfU1VCU1QoT1JUSF9GSUxFUykKCiMKIyBMZXQgcGVvcGxlIG5vdCBidWlsZC9pbnN0YWxsIGRvY3MgaWYgdGhleSBkb24ndCBoYXZlIGRvY2Jvb2sKIwoKQUNfQ0hFQ0tfUFJPRyhIQVNET0NCT09LLCBkb2Nib29rMmh0bWwsIHllcywgbm8pCgpBTV9DT05ESVRJT05BTChVU0VET0NCT09LLCB0ZXN0ICJ4JEhBU0RPQ0JPT0siID0geHllcykKCmRlZmF1bHRfZG9jcz0ieWVzIgojCiMgQ2hlY2sgaWYgZG9jcyBleGlzdCBvciBjYW4gYmUgY3JlYXRlZAojCmlmIHRlc3QgeCRIQVNET0NCT09LID0geG5vOyB0aGVuCglpZiB0ZXN0IC1mIGRvYy9mb250cy1jb25mLjU7IHRoZW4KCQk6CgllbHNlCgkJZGVmYXVsdF9kb2NzPSJubyIKCWZpCmZpCgpBQ19BUkdfRU5BQkxFKGRvY3MsICAgICAgICAgICBbICAtLWRpc2FibGUtZG9jcyAgICAgICAgICAgICAgICBEb24ndCBidWlsZCBhbmQgaW5zdGFsbCBkb2N1bWVudGF0aW9uXSwsZW5hYmxlX2RvY3M9JGRlZmF1bHRfZG9jcykKCkFNX0NPTkRJVElPTkFMKEVOQUJMRV9ET0NTLCB0ZXN0ICJ4JGVuYWJsZV9kb2NzIiA9IHh5ZXMpCgppZiB0ZXN0ICJ4JGVuYWJsZV9kb2NzIiA9IHh5ZXM7IHRoZW4KCURPQ1NSQz0iZG9jIgoJdG1wPWZ1bmNzLiQkCgljYXQgJHNyY2Rpci9kb2MvKi5mbmNzIHwgYXdrICcKCS9eQFRJVExFQC8JeyBpZiAoIWRvbmUpIHsgcHJpbnRmICgiJXNcbiIsICQyKTsgZG9uZSA9IDE7IH0gfQoJL15ARlVOQ0AvCXsgaWYgKCFkb25lKSB7IHByaW50ZiAoIiVzXG4iLCAkMik7IGRvbmUgPSAxOyB9IH0KCS9eQEAvCQl7IGRvbmUgPSAwOyB9JyA+ICR0bXAKCURPQ01BTjM9YGNhdCAkdG1wIHwgYXdrICd7IHByaW50ZiAoIiVzLjMgIiwgJDEpOyB9J2AKCWVjaG8gRE9DTUFOMyAkRE9DTUFOMwoJcm0gLWYgJHRtcAplbHNlCglET0NTUkM9IiIKCURPQ01BTjM9IiIKZmkKCkFDX1NVQlNUKERPQ1NSQykKQUNfU1VCU1QoRE9DTUFOMykKCiMKIyBGaWd1cmUgb3V0IHdoZXJlIHRvIGluc3RhbGwgZG9jdW1lbnRhdGlvbgojCgpBQ19BUkdfV0lUSChkb2NkaXIsICAgICAgICAgICBbICAtLXdpdGgtZG9jZGlyPURJUiAgICAgICAgICAgICBVc2UgRElSIHRvIHN0b3JlIGRvY3VtZW50YXRpb24gZmlsZXMgKGRlZmF1bHQgJHtkYXRhZGlyfS9kb2MvZm9udGNvbmZpZyldLCBjb25mZGlyPSIkd2l0aHZhbCIpCgppZiB0ZXN0ICJ4JHdpdGhfZG9jZGlyIiA9ICJ4IiA7IHRoZW4KICBET0NESVI9JyR7ZGF0YWRpcn0vZG9jL2ZvbnRjb25maWcnCmVsc2UKICBET0NESVI9JHdpdGhfZG9jZGlyCmZpCgpBQ19TVUJTVChET0NESVIpCgpBQ19PVVRQVVQoWwpNYWtlZmlsZSAKZm9udGNvbmZpZy9NYWtlZmlsZQpmYy1sYW5nL01ha2VmaWxlCmZjLWdseXBobmFtZS9NYWtlZmlsZQpzcmMvTWFrZWZpbGUKc3JjL2ZvbnRjb25maWcuZGVmCmZjLWNhY2hlL01ha2VmaWxlCmZjLWxpc3QvTWFrZWZpbGUKZmMtbWF0Y2gvTWFrZWZpbGUKZG9jL01ha2VmaWxlCmRvYy92ZXJzaW9uLnNnbWwKdGVzdC9NYWtlZmlsZQpmb250Y29uZmlnLnNwZWMKZm9udGNvbmZpZy5wYwpmb250cy5jb25mCmZvbnRjb25maWctemlwCl0pCg==