IyBXaW5BVlIgU2FtcGxlIG1ha2VmaWxlIHdyaXR0ZW4gYnkgRXJpYyBCLiBXZWRkaW5ndG9uLCBK9nJnIFd1bnNjaCwgZXQgYWwuDQojIFJlbGVhc2VkIHRvIHRoZSBQdWJsaWMgRG9tYWluDQojIFBsZWFzZSByZWFkIHRoZSBtYWtlIHVzZXIgbWFudWFsIQ0KIw0KIyBBZGRpdGlvbmFsIG1hdGVyaWFsIGZvciB0aGlzIG1ha2VmaWxlIHdhcyBzdWJtaXR0ZWQgYnk6DQojICBUaW0gSGVuaWdhbg0KIyAgUGV0ZXIgRmxldXJ5DQojICBSZWluZXIgUGF0b21tZWwNCiMgIFNhbmRlciBQb29sDQojICBGcmVkZXJpayBSb3VsZWF1DQojICBNYXJrdXMgUGZhZmYNCiMNCiMgT24gY29tbWFuZCBsaW5lOg0KIw0KIyBtYWtlIGFsbCA9IE1ha2Ugc29mdHdhcmUuDQojDQojIG1ha2UgY2xlYW4gPSBDbGVhbiBvdXQgYnVpbHQgcHJvamVjdCBmaWxlcy4NCiMNCiMgbWFrZSBjb2ZmID0gQ29udmVydCBFTEYgdG8gQVZSIENPRkYgKGZvciB1c2Ugd2l0aCBBVlIgU3R1ZGlvIDMueCBvciBWTUxBQikuDQojDQojIG1ha2UgZXh0Y29mZiA9IENvbnZlcnQgRUxGIHRvIEFWUiBFeHRlbmRlZCBDT0ZGIChmb3IgdXNlIHdpdGggQVZSIFN0dWRpbw0KIyAgICAgICAgICAgICAgICA0LjA3IG9yIGdyZWF0ZXIpLg0KIw0KIyBtYWtlIHByb2dyYW0gPSBEb3dubG9hZCB0aGUgaGV4IGZpbGUgdG8gdGhlIGRldmljZSwgdXNpbmcgYXZyZHVkZS4gIFBsZWFzZQ0KIyAgICAgICAgICAgICAgICBjdXN0b21pemUgdGhlIGF2cmR1ZGUgc2V0dGluZ3MgYmVsb3cgZmlyc3QhDQojDQojIG1ha2UgZmlsZW5hbWUucyA9IEp1c3QgY29tcGlsZSBmaWxlbmFtZS5jIGludG8gdGhlIGFzc2VtYmxlciBjb2RlIG9ubHkNCiMNCiMgVG8gcmVidWlsZCBwcm9qZWN0IGRvICJtYWtlIGNsZWFuIiB0aGVuICJtYWtlIGFsbCIuDQojDQoNCg0KIyBNQ1UgbmFtZQ0KTUNVID0gYXRtZWdhMzIzDQoNCiMgT3V0cHV0IGZvcm1hdC4gKGNhbiBiZSBzcmVjLCBpaGV4LCBiaW5hcnkpDQpGT1JNQVQgPSBpaGV4DQoNCiMgVGFyZ2V0IGZpbGUgbmFtZSAod2l0aG91dCBleHRlbnNpb24pLg0KVEFSR0VUID0gcnRvc2RlbW8NCg0KIyBPcHRpbWl6YXRpb24gbGV2ZWwsIGNhbiBiZSBbMCwgMSwgMiwgMywgc10uIDAgdHVybnMgb2ZmIG9wdGltaXphdGlvbi4NCiMgKE5vdGU6IDMgaXMgbm90IGFsd2F5cyB0aGUgYmVzdCBvcHRpbWl6YXRpb24gbGV2ZWwuIFNlZSBhdnItbGliYyBGQVEuKQ0KT1BUID0gcw0KDQoNCiMgTGlzdCBDIHNvdXJjZSBmaWxlcyBoZXJlLiAoQyBkZXBlbmRlbmNpZXMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLikNCkRFTU9fRElSID0gLi4vQ29tbW9uL01pbmltYWwNClNPVVJDRV9ESVIgPSAuLi8uLi9Tb3VyY2UNClBPUlRfRElSID0gLi4vLi4vU291cmNlL3BvcnRhYmxlL0dDQy9BVE1lZ2EzMjMNCg0KU1JDCT0gXA0KbWFpbi5jIFwNClBhclRlc3QvUGFyVGVzdC5jIFwNCnNlcmlhbC9zZXJpYWwuYyBcDQpyZWd0ZXN0LmMgXA0KJChTT1VSQ0VfRElSKS90YXNrcy5jIFwNCiQoU09VUkNFX0RJUikvcXVldWUuYyBcDQokKFNPVVJDRV9ESVIpL2xpc3QuYyBcDQokKFNPVVJDRV9ESVIpL2Nyb3V0aW5lLmMgXA0KJChTT1VSQ0VfRElSKS9wb3J0YWJsZS9NZW1NYW5nL2hlYXBfMS5jIFwNCiQoUE9SVF9ESVIpL3BvcnQuYyBcDQokKERFTU9fRElSKS9jcmZsYXNoLmMgXA0KJChERU1PX0RJUikvaW50ZWdlci5jIFwNCiQoREVNT19ESVIpL1BvbGxRLmMgXA0KJChERU1PX0RJUikvY29tdGVzdC5jDQoNCg0KIyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHNvdXJjZSBmaWxlLCBhcHBlbmQgdGhlbSBhYm92ZSwgb3IgbW9kaWZ5IGFuZA0KIyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZzoNCiNTUkMgKz0gZm9vLmMgYmFyLmMNCg0KIyBZb3UgY2FuIGFsc28gd3JhcCBsaW5lcyBieSBhcHBlbmRpbmcgYSBiYWNrc2xhc2ggdG8gdGhlIGVuZCBvZiB0aGUgbGluZToNCiNTUkMgKz0gYmF6LmMgXA0KI3h5enp5LmMNCg0KDQoNCiMgTGlzdCBBc3NlbWJsZXIgc291cmNlIGZpbGVzIGhlcmUuDQojIE1ha2UgdGhlbSBhbHdheXMgZW5kIGluIGEgY2FwaXRhbCAuUy4gIEZpbGVzIGVuZGluZyBpbiBhIGxvd2VyY2FzZSAucw0KIyB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIHNvdXJjZSBmaWxlcyBidXQgZ2VuZXJhdGVkIGZpbGVzIChhc3NlbWJsZXINCiMgb3V0cHV0IGZyb20gdGhlIGNvbXBpbGVyKSwgYW5kIHdpbGwgYmUgZGVsZXRlZCB1cG9uICJtYWtlIGNsZWFuIiENCiMgRXZlbiB0aG91Z2ggdGhlIERPUy9XaW4qIGZpbGVzeXN0ZW0gbWF0Y2hlcyBib3RoIC5zIGFuZCAuUyB0aGUgc2FtZSwNCiMgaXQgd2lsbCBwcmVzZXJ2ZSB0aGUgc3BlbGxpbmcgb2YgdGhlIGZpbGVuYW1lcywgYW5kIGdjYyBpdHNlbGYgZG9lcw0KIyBjYXJlIGFib3V0IGhvdyB0aGUgbmFtZSBpcyBzcGVsbGVkIG9uIGl0cyBjb21tYW5kLWxpbmUuDQpBU1JDID0gDQoNCg0KIyBMaXN0IGFueSBleHRyYSBkaXJlY3RvcmllcyB0byBsb29rIGZvciBpbmNsdWRlIGZpbGVzIGhlcmUuDQojICAgICBFYWNoIGRpcmVjdG9yeSBtdXN0IGJlIHNlcGVyYXRlZCBieSBhIHNwYWNlLg0KRVhUUkFJTkNESVJTID0gDQoNCg0KIyBPcHRpb25hbCBjb21waWxlciBmbGFncy4NCiMgIC1nOiAgICAgICAgZ2VuZXJhdGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIChmb3IgR0RCLCBvciBmb3IgQ09GRiBjb252ZXJzaW9uKQ0KIyAgLU8qOiAgICAgICBvcHRpbWl6YXRpb24gbGV2ZWwNCiMgIC1mLi4uOiAgICAgdHVuaW5nLCBzZWUgZ2NjIG1hbnVhbCBhbmQgYXZyLWxpYmMgZG9jdW1lbnRhdGlvbg0KIyAgLVdhbGwuLi46ICB3YXJuaW5nIGxldmVsDQojICAtV2EsLi4uOiAgIHRlbGwgR0NDIHRvIHBhc3MgdGhpcyB0byB0aGUgYXNzZW1ibGVyLg0KIyAgICAtYWhsbXM6ICBjcmVhdGUgYXNzZW1ibGVyIGxpc3RpbmcNCg0KREVCVUdfTEVWRUw9LWcNCldBUk5JTkdTPS1XYWxsIC1XZXh0cmEgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIFwNCgkJLVdhZ2dyZWdhdGUtcmV0dXJuIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV3VudXNlZA0KDQpDRkxBR1MgPSAtRCBHQ0NfTUVHQV9BVlIgLUkuIC1JLi4vLi4vU291cmNlL2luY2x1ZGUgLUkuLi9Db21tb24vaW5jbHVkZSAgXA0KJChERUJVR19MRVZFTCkgLU8kKE9QVCkgXA0KLWZzaWduZWQtY2hhciAtZnVuc2lnbmVkLWJpdGZpZWxkcyAtZnBhY2stc3RydWN0IC1mc2hvcnQtZW51bXMgXA0KJChXQVJOSU5HUykgXA0KLVdhLC1hZGhsbnM9JCg8Oi5jPS5sc3QpIFwNCiQocGF0c3Vic3QgJSwtSSUsJChFWFRSQUlOQ0RJUlMpKQ0KDQoNCiMgU2V0IGEgImxhbmd1YWdlIHN0YW5kYXJkIiBjb21waWxlciBmbGFnLg0KIyAgIFVucmVtYXJrIGp1c3Qgb25lIGxpbmUgYmVsb3cgdG8gc2V0IHRoZSBsYW5ndWFnZSBzdGFuZGFyZCB0byB1c2UuDQojICAgZ251OTkgPSBDOTkgKyBHTlUgZXh0ZW5zaW9ucy4gU2VlIEdDQyBtYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQojQ0ZMQUdTICs9IC1zdGQ9Yzg5DQojQ0ZMQUdTICs9IC1zdGQ9Z251ODkNCiNDRkxBR1MgKz0gLXN0ZD1jOTkNCkNGTEFHUyArPSAtc3RkPWdudTk5DQoNCg0KDQojIE9wdGlvbmFsIGFzc2VtYmxlciBmbGFncy4NCiMgIC1XYSwuLi46ICAgdGVsbCBHQ0MgdG8gcGFzcyB0aGlzIHRvIHRoZSBhc3NlbWJsZXIuDQojICAtYWhsbXM6ICAgIGNyZWF0ZSBsaXN0aW5nDQojICAtZ3N0YWJzOiAgIGhhdmUgdGhlIGFzc2VtYmxlciBjcmVhdGUgbGluZSBudW1iZXIgaW5mb3JtYXRpb247IG5vdGUgdGhhdA0KIyAgICAgICAgICAgICBmb3IgdXNlIGluIENPRkYgZmlsZXMsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgZmlsZW5hbWVzDQojICAgICAgICAgICAgIGFuZCBmdW5jdGlvbiBuYW1lcyBuZWVkcyB0byBiZSBwcmVzZW50IGluIHRoZSBhc3NlbWJsZXIgc291cmNlDQojICAgICAgICAgICAgIGZpbGVzIC0tIHNlZSBhdnItbGliYyBkb2NzIFtGSVhNRTogbm90IHlldCBkZXNjcmliZWQgdGhlcmVdDQpBU0ZMQUdTID0gLVdhLC1hZGhsbnM9JCg8Oi5TPS5sc3QpLC1nc3RhYnMgDQoNCg0KDQojIE9wdGlvbmFsIGxpbmtlciBmbGFncy4NCiMgIC1XbCwuLi46ICAgdGVsbCBHQ0MgdG8gcGFzcyB0aGlzIHRvIGxpbmtlci4NCiMgIC1NYXA6ICAgICAgY3JlYXRlIG1hcCBmaWxlDQojICAtLWNyZWY6ICAgIGFkZCBjcm9zcyByZWZlcmVuY2UgdG8gIG1hcCBmaWxlDQpMREZMQUdTID0gLVdsLC1NYXA9JChUQVJHRVQpLm1hcCwtLWNyZWYNCg0KDQoNCiMgQWRkaXRpb25hbCBsaWJyYXJpZXMNCg0KIyBNaW5pbWFsaXN0aWMgcHJpbnRmIHZlcnNpb24NCiNMREZMQUdTICs9IC1XbCwtdSx2ZnByaW50ZiAtbHByaW50Zl9taW4NCg0KIyBGbG9hdGluZyBwb2ludCBwcmludGYgdmVyc2lvbiAocmVxdWlyZXMgLWxtIGJlbG93KQ0KI0xERkxBR1MgKz0gLVdsLC11LHZmcHJpbnRmIC1scHJpbnRmX2ZsdA0KDQojIC1sbSA9IG1hdGggbGlicmFyeQ0KTERGTEFHUyArPSAtbG0NCg0KDQoNCg0KIyBQcm9ncmFtbWluZyBzdXBwb3J0IHVzaW5nIGF2cmR1ZGUuIFNldHRpbmdzIGFuZCB2YXJpYWJsZXMuDQoNCiMgUHJvZ3JhbW1pbmcgaGFyZHdhcmU6IGFsZiBhdnI5MTAgYXZyaXNwIGJhc2NvbSBic2QgDQojIGR0MDA2IHBhdnIgcGljb3dlYiBwb255LXN0azIwMCBzcDEyIHN0azIwMCBzdGs1MDANCiMNCiMgVHlwZTogYXZyZHVkZSAtYyA/DQojIHRvIGdldCBhIGZ1bGwgbGlzdGluZy4NCiMNCkFWUkRVREVfUFJPR1JBTU1FUiA9IHN0azUwMA0KDQoNCkFWUkRVREVfUE9SVCA9IGNvbTEJICAgIyBwcm9ncmFtbWVyIGNvbm5lY3RlZCB0byBzZXJpYWwgZGV2aWNlDQojQVZSRFVERV9QT1JUID0gbHB0MQkjIHByb2dyYW1tZXIgY29ubmVjdGVkIHRvIHBhcmFsbGVsIHBvcnQNCg0KQVZSRFVERV9XUklURV9GTEFTSCA9IC1VIGZsYXNoOnc6JChUQVJHRVQpLmhleA0KI0FWUkRVREVfV1JJVEVfRUVQUk9NID0gLVUgZWVwcm9tOnc6JChUQVJHRVQpLmVlcA0KDQpBVlJEVURFX0ZMQUdTID0gLXAgJChNQ1UpIC1QICQoQVZSRFVERV9QT1JUKSAtYyAkKEFWUkRVREVfUFJPR1JBTU1FUikNCg0KIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBpZiB5b3Ugd2FudCBhdnJkdWRlJ3MgZXJhc2UgY3ljbGUgY291bnRlci4NCiMgTm90ZSB0aGF0IHRoaXMgY291bnRlciBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBmaXJzdCB1c2luZyAtWW4sDQojIHNlZSBhdnJkdWRlIG1hbnVhbC4NCiNBVlJEVURFX0VSQVNFICs9IC15DQoNCiMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgaWYgeW91IGRvIC9ub3QvIHdpc2ggYSB2ZXJpZmljYXRpb24gdG8gYmUNCiMgcGVyZm9ybWVkIGFmdGVyIHByb2dyYW1taW5nIHRoZSBkZXZpY2UuDQojQVZSRFVERV9GTEFHUyArPSAtVg0KDQojIEluY3JlYXNlIHZlcmJvc2l0eSBsZXZlbC4gIFBsZWFzZSB1c2UgdGhpcyB3aGVuIHN1Ym1pdHRpbmcgYnVnDQojIHJlcG9ydHMgYWJvdXQgYXZyZHVkZS4gU2VlIDxodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9hdnJkdWRlPiANCiMgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLg0KI0FWUkRVREVfRkxBR1MgKz0gLXYgLXYNCg0KDQoNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyBEZWZpbmUgZGlyZWN0b3JpZXMsIGlmIG5lZWRlZC4NCkRJUkFWUiA9IGM6L3dpbmF2cg0KRElSQVZSQklOID0gJChESVJBVlIpL2Jpbg0KRElSQVZSVVRJTFMgPSAkKERJUkFWUikvdXRpbHMvYmluDQpESVJJTkMgPSAuDQpESVJMSUIgPSAkKERJUkFWUikvYXZyL2xpYg0KDQoNCiMgRGVmaW5lIHByb2dyYW1zIGFuZCBjb21tYW5kcy4NClNIRUxMID0gc2gNCg0KQ0MgPSBhdnItZ2NjDQoNCk9CSkNPUFkgPSBhdnItb2JqY29weQ0KT0JKRFVNUCA9IGF2ci1vYmpkdW1wDQpTSVpFID0gYXZyLXNpemUNCg0KDQojIFByb2dyYW1taW5nIHN1cHBvcnQgdXNpbmcgYXZyZHVkZS4NCkFWUkRVREUgPSBhdnJkdWRlDQoNCg0KUkVNT1ZFID0gcm0gLWYNCkNPUFkgPSBjcA0KDQpIRVhTSVpFID0gJChTSVpFKSAtLXRhcmdldD0kKEZPUk1BVCkgJChUQVJHRVQpLmhleA0KRUxGU0laRSA9ICQoU0laRSkgLUEgJChUQVJHRVQpLmVsZg0KDQoNCg0KIyBEZWZpbmUgTWVzc2FnZXMNCiMgRW5nbGlzaA0KTVNHX0VSUk9SU19OT05FID0gRXJyb3JzOiBub25lDQpNU0dfQkVHSU4gPSAtLS0tLS0tLSBiZWdpbiAtLS0tLS0tLQ0KTVNHX0VORCA9IC0tLS0tLS0tICBlbmQgIC0tLS0tLS0tDQpNU0dfU0laRV9CRUZPUkUgPSBTaXplIGJlZm9yZTogDQpNU0dfU0laRV9BRlRFUiA9IFNpemUgYWZ0ZXI6DQpNU0dfQ09GRiA9IENvbnZlcnRpbmcgdG8gQVZSIENPRkY6DQpNU0dfRVhURU5ERURfQ09GRiA9IENvbnZlcnRpbmcgdG8gQVZSIEV4dGVuZGVkIENPRkY6DQpNU0dfRkxBU0ggPSBDcmVhdGluZyBsb2FkIGZpbGUgZm9yIEZsYXNoOg0KTVNHX0VFUFJPTSA9IENyZWF0aW5nIGxvYWQgZmlsZSBmb3IgRUVQUk9NOg0KTVNHX0VYVEVOREVEX0xJU1RJTkcgPSBDcmVhdGluZyBFeHRlbmRlZCBMaXN0aW5nOg0KTVNHX1NZTUJPTF9UQUJMRSA9IENyZWF0aW5nIFN5bWJvbCBUYWJsZToNCk1TR19MSU5LSU5HID0gTGlua2luZzoNCk1TR19DT01QSUxJTkcgPSBDb21waWxpbmc6DQpNU0dfQVNTRU1CTElORyA9IEFzc2VtYmxpbmc6DQpNU0dfQ0xFQU5JTkcgPSBDbGVhbmluZyBwcm9qZWN0Og0KDQoNCg0KDQojIERlZmluZSBhbGwgb2JqZWN0IGZpbGVzLg0KT0JKID0gJChTUkM6LmM9Lm8pICQoQVNSQzouUz0ubykgDQoNCiMgRGVmaW5lIGFsbCBsaXN0aW5nIGZpbGVzLg0KTFNUID0gJChBU1JDOi5TPS5sc3QpICQoU1JDOi5jPS5sc3QpDQoNCiMgQ29tYmluZSBhbGwgbmVjZXNzYXJ5IGZsYWdzIGFuZCBvcHRpb25hbCBmbGFncy4NCiMgQWRkIHRhcmdldCBwcm9jZXNzb3IgdG8gZmxhZ3MuDQpBTExfQ0ZMQUdTID0gLW1tY3U9JChNQ1UpIC1JLiAkKENGTEFHUykNCkFMTF9BU0ZMQUdTID0gLW1tY3U9JChNQ1UpIC1JLiAteCBhc3NlbWJsZXItd2l0aC1jcHAgJChBU0ZMQUdTKQ0KDQoNCg0KIyBEZWZhdWx0IHRhcmdldC4NCmFsbDogYmVnaW4gZ2NjdmVyc2lvbiBzaXplYmVmb3JlICQoVEFSR0VUKS5lbGYgJChUQVJHRVQpLmhleCAkKFRBUkdFVCkuZWVwIFwNCgkkKFRBUkdFVCkubHNzICQoVEFSR0VUKS5zeW0gc2l6ZWFmdGVyIGZpbmlzaGVkIGVuZA0KDQoNCiMgRXllIGNhbmR5Lg0KIyBBVlIgU3R1ZGlvIDMueCBkb2VzIG5vdCBjaGVjayBtYWtlJ3MgZXhpdCBjb2RlIGJ1dCByZWxpZXMgb24NCiMgdGhlIGZvbGxvd2luZyBtYWdpYyBzdHJpbmdzIHRvIGJlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZSBqb2IuDQpiZWdpbjoNCglAZWNobw0KCUBlY2hvICQoTVNHX0JFR0lOKQ0KDQpmaW5pc2hlZDoNCglAZWNobyAkKE1TR19FUlJPUlNfTk9ORSkNCg0KZW5kOg0KCUBlY2hvICQoTVNHX0VORCkNCglAZWNobw0KDQoNCiMgRGlzcGxheSBzaXplIG9mIGZpbGUuDQpzaXplYmVmb3JlOg0KCUBpZiBbIC1mICQoVEFSR0VUKS5lbGYgXTsgdGhlbiBlY2hvOyBlY2hvICQoTVNHX1NJWkVfQkVGT1JFKTsgJChFTEZTSVpFKTsgZWNobzsgZmkNCg0Kc2l6ZWFmdGVyOg0KCUBpZiBbIC1mICQoVEFSR0VUKS5lbGYgXTsgdGhlbiBlY2hvOyBlY2hvICQoTVNHX1NJWkVfQUZURVIpOyAkKEVMRlNJWkUpOyBlY2hvOyBmaQ0KDQoNCg0KIyBEaXNwbGF5IGNvbXBpbGVyIHZlcnNpb24gaW5mb3JtYXRpb24uDQpnY2N2ZXJzaW9uIDogDQoJQCQoQ0MpIC0tdmVyc2lvbg0KDQoNCg0KDQojIENvbnZlcnQgRUxGIHRvIENPRkYgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcgLyBzaW11bGF0aW5nIGluDQojIEFWUiBTdHVkaW8gb3IgVk1MQUIuDQpDT0ZGQ09OVkVSVD0kKE9CSkNPUFkpIC0tZGVidWdnaW5nIFwNCgktLWNoYW5nZS1zZWN0aW9uLWFkZHJlc3MgLmRhdGEtMHg4MDAwMDAgXA0KCS0tY2hhbmdlLXNlY3Rpb24tYWRkcmVzcyAuYnNzLTB4ODAwMDAwIFwNCgktLWNoYW5nZS1zZWN0aW9uLWFkZHJlc3MgLm5vaW5pdC0weDgwMDAwMCBcDQoJLS1jaGFuZ2Utc2VjdGlvbi1hZGRyZXNzIC5lZXByb20tMHg4MTAwMDAgDQoNCg0KY29mZjogJChUQVJHRVQpLmVsZg0KCUBlY2hvDQoJQGVjaG8gJChNU0dfQ09GRikgJChUQVJHRVQpLmNvZg0KCSQoQ09GRkNPTlZFUlQpIC1PIGNvZmYtYXZyICQ8ICQoVEFSR0VUKS5jb2YNCg0KDQpleHRjb2ZmOiAkKFRBUkdFVCkuZWxmDQoJQGVjaG8NCglAZWNobyAkKE1TR19FWFRFTkRFRF9DT0ZGKSAkKFRBUkdFVCkuY29mDQoJJChDT0ZGQ09OVkVSVCkgLU8gY29mZi1leHQtYXZyICQ8ICQoVEFSR0VUKS5jb2YNCg0KDQoNCg0KIyBQcm9ncmFtIHRoZSBkZXZpY2UuICANCnByb2dyYW06ICQoVEFSR0VUKS5oZXggJChUQVJHRVQpLmVlcA0KCSQoQVZSRFVERSkgJChBVlJEVURFX0ZMQUdTKSAkKEFWUkRVREVfV1JJVEVfRkxBU0gpICQoQVZSRFVERV9XUklURV9FRVBST00pDQoNCg0KDQoNCiMgQ3JlYXRlIGZpbmFsIG91dHB1dCBmaWxlcyAoLmhleCwgLmVlcCkgZnJvbSBFTEYgb3V0cHV0IGZpbGUuDQolLmhleDogJS5lbGYNCglAZWNobwoJQGVjaG8gJChNU0dfRkxBU0gpICRACgkkKE9CSkNPUFkpIC1PICQoRk9STUFUKSAtUiAuZWVwcm9tICQ8ICRADQoNCiUuZWVwOiAlLmVsZg0KCUBlY2hvCglAZWNobyAkKE1TR19FRVBST00pICRACgktJChPQkpDT1BZKSAtaiAuZWVwcm9tIC0tc2V0LXNlY3Rpb24tZmxhZ3M9LmVlcHJvbT0iYWxsb2MsbG9hZCIgXA0KCS0tY2hhbmdlLXNlY3Rpb24tbG1hIC5lZXByb209MCAtTyAkKEZPUk1BVCkgJDwgJEANCg0KIyBDcmVhdGUgZXh0ZW5kZWQgbGlzdGluZyBmaWxlIGZyb20gRUxGIG91dHB1dCBmaWxlLg0KJS5sc3M6ICUuZWxmDQoJQGVjaG8KCUBlY2hvICQoTVNHX0VYVEVOREVEX0xJU1RJTkcpICRACgkkKE9CSkRVTVApIC1oIC1TICQ8ID4gJEANCg0KIyBDcmVhdGUgYSBzeW1ib2wgdGFibGUgZnJvbSBFTEYgb3V0cHV0IGZpbGUuCiUuc3ltOiAlLmVsZgoJQGVjaG8KCUBlY2hvICQoTVNHX1NZTUJPTF9UQUJMRSkgJEAKCWF2ci1ubSAtbiAkPCA+ICRADQoNCg0KDQojIExpbms6IGNyZWF0ZSBFTEYgb3V0cHV0IGZpbGUgZnJvbSBvYmplY3QgZmlsZXMuDQouU0VDT05EQVJZIDogJChUQVJHRVQpLmVsZg0KLlBSRUNJT1VTIDogJChPQkopDQolLmVsZjogJChPQkopDQoJQGVjaG8NCglAZWNobyAkKE1TR19MSU5LSU5HKSAkQA0KCSQoQ0MpICQoQUxMX0NGTEFHUykgJChPQkopIC0tb3V0cHV0ICRAICQoTERGTEFHUykNCg0KDQojIENvbXBpbGU6IGNyZWF0ZSBvYmplY3QgZmlsZXMgZnJvbSBDIHNvdXJjZSBmaWxlcy4NCiUubyA6ICUuYw0KCUBlY2hvDQoJQGVjaG8gJChNU0dfQ09NUElMSU5HKSAkPA0KCSQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJDwgLW8gJEANCg0KDQojIENvbXBpbGU6IGNyZWF0ZSBhc3NlbWJsZXIgZmlsZXMgZnJvbSBDIHNvdXJjZSBmaWxlcy4NCiUucyA6ICUuYw0KCSQoQ0MpIC1TICQoQUxMX0NGTEFHUykgJDwgLW8gJEANCg0KDQojIEFzc2VtYmxlOiBjcmVhdGUgb2JqZWN0IGZpbGVzIGZyb20gYXNzZW1ibGVyIHNvdXJjZSBmaWxlcy4NCiUubyA6ICUuUw0KCUBlY2hvDQoJQGVjaG8gJChNU0dfQVNTRU1CTElORykgJDwNCgkkKENDKSAtYyAkKEFMTF9BU0ZMQUdTKSAkPCAtbyAkQA0KDQoNCg0KDQoNCg0KIyBUYXJnZXQ6IGNsZWFuIHByb2plY3QuDQpjbGVhbjogYmVnaW4gY2xlYW5fbGlzdCBmaW5pc2hlZCBlbmQNCg0KY2xlYW5fbGlzdCA6DQoJQGVjaG8KCUBlY2hvICQoTVNHX0NMRUFOSU5HKQoJJChSRU1PVkUpICQoVEFSR0VUKS5oZXgNCgkkKFJFTU9WRSkgJChUQVJHRVQpLmVlcA0KCSQoUkVNT1ZFKSAkKFRBUkdFVCkub2JqDQoJJChSRU1PVkUpICQoVEFSR0VUKS5jb2YNCgkkKFJFTU9WRSkgJChUQVJHRVQpLmVsZg0KCSQoUkVNT1ZFKSAkKFRBUkdFVCkubWFwDQoJJChSRU1PVkUpICQoVEFSR0VUKS5vYmoNCgkkKFJFTU9WRSkgJChUQVJHRVQpLmE5MA0KCSQoUkVNT1ZFKSAkKFRBUkdFVCkuc3ltDQoJJChSRU1PVkUpICQoVEFSR0VUKS5sbmsNCgkkKFJFTU9WRSkgJChUQVJHRVQpLmxzcw0KCSQoUkVNT1ZFKSAkKE9CSikNCgkkKFJFTU9WRSkgJChMU1QpDQoJJChSRU1PVkUpICQoU1JDOi5jPS5zKQ0KCSQoUkVNT1ZFKSAkKFNSQzouYz0uZCkNCg0KDQojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgQyBzb3VyY2UgY29kZSBkZXBlbmRlbmNpZXMuIA0KIyAoQ29kZSBvcmlnaW5hbGx5IHRha2VuIGZyb20gdGhlIEdOVSBtYWtlIHVzZXIgbWFudWFsIGFuZCBtb2RpZmllZCANCiMgKFNlZSBSRUFETUUudHh0IENyZWRpdHMpLikNCiMNCiMgTm90ZSB0aGF0IHRoaXMgd2lsbCB3b3JrIHdpdGggc2ggKGJhc2gpIGFuZCBzZWQgdGhhdCBpcyBzaGlwcGVkIHdpdGggV2luQVZSDQojIChzZWUgdGhlIFNIRUxMIHZhcmlhYmxlIGRlZmluZWQgYWJvdmUpLg0KIyBUaGlzIG1heSBub3Qgd29yayB3aXRoIG90aGVyIHNoZWxscyBvciBvdGhlciBzZWRzLg0KIw0KJS5kOiAlLmMNCglzZXQgLWU7ICQoQ0MpIC1NTSAkKEFMTF9DRkxBR1MpICQ8IFwNCgl8IHNlZCAncyxcKC4qXClcLm9bIDpdKixcMS5vIFwxLmQgOiAsZycgPiAkQDsgXA0KCVsgLXMgJEAgXSB8fCBybSAtZiAkQA0KDQoNCiMgUmVtb3ZlIHRoZSAnLScgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBkZXBlbmRlbmN5IGZpbGVzIGdlbmVyYXRlZC4NCi1pbmNsdWRlICQoU1JDOi5jPS5kKQ0KDQoNCg0KIyBMaXN0aW5nIG9mIHBob255IHRhcmdldHMuDQouUEhPTlkgOiBhbGwgYmVnaW4gZmluaXNoIGVuZCBzaXplYmVmb3JlIHNpemVhZnRlciBnY2N2ZXJzaW9uIGNvZmYgZXh0Y29mZiBcDQoJY2xlYW4gY2xlYW5fbGlzdCBwcm9ncmFtDQoNCg==