60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a9190620005fa565b50680821ab0d4414980000600d5561012c600e556001600f556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000a657600080fd5b5060405162005364380380620053648339818101604052810190620000cc919062000845565b83838160009081620000df9190620005fa565b508060019081620000f19190620005fa565b50505062000114620001086200014060201b60201c565b6200014860201b60201c565b62000125826200020e60201b60201c565b6200013681620002b260201b60201c565b50505050620009b6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021e6200014060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002446200035660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002949062000994565b60405180910390fd5b80600b9081620002ae9190620005fa565b5050565b620002c26200014060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e86200035660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003389062000994565b60405180910390fd5b8060119081620003529190620005fa565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040257607f821691505b602082108103620004185762000417620003ba565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000443565b6200048e868362000443565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004db620004d5620004cf84620004a6565b620004b0565b620004a6565b9050919050565b6000819050919050565b620004f783620004ba565b6200050f6200050682620004e2565b84845462000450565b825550505050565b600090565b6200052662000517565b62000533818484620004ec565b505050565b5b818110156200055b576200054f6000826200051c565b60018101905062000539565b5050565b601f821115620005aa5762000574816200041e565b6200057f8462000433565b810160208510156200058f578190505b620005a76200059e8562000433565b83018262000538565b50505b505050565b600082821c905092915050565b6000620005cf60001984600802620005af565b1980831691505092915050565b6000620005ea8383620005bc565b9150826002028217905092915050565b620006058262000380565b67ffffffffffffffff8111156200062157620006206200038b565b5b6200062d8254620003e9565b6200063a8282856200055f565b600060209050601f8311600181146200067257600084156200065d578287015190505b620006698582620005dc565b865550620006d9565b601f19841662000682866200041e565b60005b82811015620006ac5784890151825560018201915060208501945060208101905062000685565b86831015620006cc5784890151620006c8601f891682620005bc565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200071b82620006ff565b810181811067ffffffffffffffff821117156200073d576200073c6200038b565b5b80604052505050565b600062000752620006e1565b905062000760828262000710565b919050565b600067ffffffffffffffff8211156200078357620007826200038b565b5b6200078e82620006ff565b9050602081019050919050565b60005b83811015620007bb5780820151818401526020810190506200079e565b60008484015250505050565b6000620007de620007d88462000765565b62000746565b905082815260208101848484011115620007fd57620007fc620006fa565b5b6200080a8482856200079b565b509392505050565b600082601f8301126200082a5762000829620006f5565b5b81516200083c848260208601620007c7565b91505092915050565b60008060008060808587031215620008625762000861620006eb565b5b600085015167ffffffffffffffff811115620008835762000882620006f0565b5b620008918782880162000812565b945050602085015167ffffffffffffffff811115620008b557620008b4620006f0565b5b620008c38782880162000812565b935050604085015167ffffffffffffffff811115620008e757620008e6620006f0565b5b620008f58782880162000812565b925050606085015167ffffffffffffffff811115620009195762000918620006f0565b5b620009278782880162000812565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200097c60208362000933565b9150620009898262000944565b602082019050919050565b60006020820190508181036000830152620009af816200096d565b9050919050565b61499e80620009c66000396000f3fe6080604052600436106102305760003560e01c80635c975abb1161012e578063a22cb465116100ab578063d5abeb011161006f578063d5abeb01146107f9578063da3ef23f14610824578063e985e9c51461084d578063f2c4ce1e1461088a578063f2fde38b146108b357610230565b8063a22cb46514610728578063a475b5dd14610751578063b88d4fde14610768578063c668286214610791578063c87b56dd146107bc57610230565b8063729ad39e116100f2578063729ad39e146106645780637f00c7a61461068d5780638da5cb5b146106b657806395d89b41146106e1578063a0712d681461070c57610230565b80635c975abb1461057f5780636352211e146105aa5780636f8b44b0146105e757806370a0823114610610578063715018a61461064d57610230565b8063239c70ae116101bc578063438b630011610180578063438b63001461048857806344a0d68a146104c55780634f6ccce7146104ee578063518302271461052b57806355f804b31461055657610230565b8063239c70ae146103c457806323b872dd146103ef5780632f745c59146104185780633ccfd60b1461045557806342842e0e1461045f57610230565b8063081c8c4411610203578063081c8c4414610303578063095ea7b31461032e57806313faede614610357578063158756b91461038257806318160ddd1461039957610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612ff3565b6108dc565b604051610269919061303b565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613082565b610956565b005b3480156102a757600080fd5b506102b06109ef565b6040516102bd919061313f565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613197565b610a81565b6040516102fa9190613205565b60405180910390f35b34801561030f57600080fd5b50610318610b06565b604051610325919061313f565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061324c565b610b94565b005b34801561036357600080fd5b5061036c610cab565b604051610379919061329b565b60405180910390f35b34801561038e57600080fd5b50610397610cb1565b005b3480156103a557600080fd5b506103ae610d4a565b6040516103bb919061329b565b60405180910390f35b3480156103d057600080fd5b506103d9610d57565b6040516103e6919061329b565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906132b6565b610d5d565b005b34801561042457600080fd5b5061043f600480360381019061043a919061324c565b610dbd565b60405161044c919061329b565b60405180910390f35b61045d610e62565b005b34801561046b57600080fd5b50610486600480360381019061048191906132b6565b610f5e565b005b34801561049457600080fd5b506104af60048036038101906104aa9190613309565b610f7e565b6040516104bc91906133f4565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613197565b61102c565b005b3480156104fa57600080fd5b5061051560048036038101906105109190613197565b6110b2565b604051610522919061329b565b60405180910390f35b34801561053757600080fd5b50610540611123565b60405161054d919061303b565b60405180910390f35b34801561056257600080fd5b5061057d6004803603810190610578919061354b565b611136565b005b34801561058b57600080fd5b506105946111c5565b6040516105a1919061303b565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613197565b6111d8565b6040516105de9190613205565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613197565b611289565b005b34801561061c57600080fd5b5061063760048036038101906106329190613309565b61130f565b604051610644919061329b565b60405180910390f35b34801561065957600080fd5b506106626113c6565b005b34801561067057600080fd5b5061068b6004803603810190610686919061365c565b61144e565b005b34801561069957600080fd5b506106b460048036038101906106af9190613197565b611586565b005b3480156106c257600080fd5b506106cb61160c565b6040516106d89190613205565b60405180910390f35b3480156106ed57600080fd5b506106f6611636565b604051610703919061313f565b60405180910390f35b61072660048036038101906107219190613197565b6116c8565b005b34801561073457600080fd5b5061074f600480360381019061074a91906136a5565b6117b4565b005b34801561075d57600080fd5b50610766611934565b005b34801561077457600080fd5b5061078f600480360381019061078a9190613786565b6119cd565b005b34801561079d57600080fd5b506107a6611a2f565b6040516107b3919061313f565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613197565b611abd565b6040516107f0919061313f565b60405180910390f35b34801561080557600080fd5b5061080e611c15565b60405161081b919061329b565b60405180910390f35b34801561083057600080fd5b5061084b6004803603810190610846919061354b565b611c1b565b005b34801561085957600080fd5b50610874600480360381019061086f9190613809565b611caa565b604051610881919061303b565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac919061354b565b611d3e565b005b3480156108bf57600080fd5b506108da60048036038101906108d59190613309565b611dcd565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094f575061094e82611ec4565b5b9050919050565b61095e611fa6565b73ffffffffffffffffffffffffffffffffffffffff1661097c61160c565b73ffffffffffffffffffffffffffffffffffffffff16146109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990613895565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109fe906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906138e4565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82611fae565b610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613987565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610b13906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3f906138e4565b8015610b8c5780601f10610b6157610100808354040283529160200191610b8c565b820191906000526020600020905b815481529060010190602001808311610b6f57829003601f168201915b505050505081565b6000610b9f826111d8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613a19565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c2e611fa6565b73ffffffffffffffffffffffffffffffffffffffff161480610c5d5750610c5c81610c57611fa6565b611caa565b5b610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9390613aab565b60405180910390fd5b610ca6838361201a565b505050565b600d5481565b610cb9611fa6565b73ffffffffffffffffffffffffffffffffffffffff16610cd761160c565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490613895565b60405180910390fd5b6000601060016101000a81548160ff021916908315150217905550565b6000600880549050905090565b600f5481565b610d6e610d68611fa6565b826120d3565b610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490613b3d565b60405180910390fd5b610db88383836121b1565b505050565b6000610dc88361130f565b8210610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090613bcf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e6a611fa6565b73ffffffffffffffffffffffffffffffffffffffff16610e8861160c565b73ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613895565b60405180910390fd5b6000610ee861160c565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f0b90613c20565b60006040518083038185875af1925050503d8060008114610f48576040519150601f19603f3d011682016040523d82523d6000602084013e610f4d565b606091505b5050905080610f5b57600080fd5b50565b610f79838383604051806020016040528060008152506119cd565b505050565b60606000610f8b8361130f565b905060008167ffffffffffffffff811115610fa957610fa8613420565b5b604051908082528060200260200182016040528015610fd75781602001602082028036833780820191505090505b50905060005b8281101561102157610fef8582610dbd565b82828151811061100257611001613c35565b5b602002602001018181525050808061101990613c93565b915050610fdd565b508092505050919050565b611034611fa6565b73ffffffffffffffffffffffffffffffffffffffff1661105261160c565b73ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90613895565b60405180910390fd5b80600d8190555050565b60006110bc610d4a565b82106110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613d4d565b60405180910390fd5b6008828154811061111157611110613c35565b5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b61113e611fa6565b73ffffffffffffffffffffffffffffffffffffffff1661115c61160c565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990613895565b60405180910390fd5b80600b90816111c19190613f19565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112779061405d565b60405180910390fd5b80915050919050565b611291611fa6565b73ffffffffffffffffffffffffffffffffffffffff166112af61160c565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613895565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611376906140ef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ce611fa6565b73ffffffffffffffffffffffffffffffffffffffff166113ec61160c565b73ffffffffffffffffffffffffffffffffffffffff1614611442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143990613895565b60405180910390fd5b61144c600061240c565b565b611456611fa6565b73ffffffffffffffffffffffffffffffffffffffff1661147461160c565b73ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613895565b60405180910390fd5b60006114d4610d4a565b9050600e548251826114e6919061410f565b1115611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e9061418f565b60405180910390fd5b60005b82518110156115815761156e83828151811061154957611548613c35565b5b60200260200101516001838561155f919061410f565b611569919061410f565b6124d2565b808061157990613c93565b91505061152a565b505050565b61158e611fa6565b73ffffffffffffffffffffffffffffffffffffffff166115ac61160c565b73ffffffffffffffffffffffffffffffffffffffff1614611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613895565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611645906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611671906138e4565b80156116be5780601f10611693576101008083540402835291602001916116be565b820191906000526020600020905b8154815290600101906020018083116116a157829003601f168201915b5050505050905090565b60006116d2610d4a565b9050601060009054906101000a900460ff16156116ee57600080fd5b600082116116fb57600080fd5b600f5482111561170a57600080fd5b600e548282611719919061410f565b111561172457600080fd5b61172c61160c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117795781600d5461176c91906141af565b34101561177857600080fd5b5b6000600190505b8281116117af5761179c338284611797919061410f565b6124d2565b80806117a790613c93565b915050611780565b505050565b6117bc611fa6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118209061423d565b60405180910390fd5b8060056000611836611fa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118e3611fa6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611928919061303b565b60405180910390a35050565b61193c611fa6565b73ffffffffffffffffffffffffffffffffffffffff1661195a61160c565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790613895565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b6119de6119d8611fa6565b836120d3565b611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490613b3d565b60405180910390fd5b611a29848484846124f0565b50505050565b600c8054611a3c906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a68906138e4565b8015611ab55780601f10611a8a57610100808354040283529160200191611ab5565b820191906000526020600020905b815481529060010190602001808311611a9857829003601f168201915b505050505081565b6060611ac882611fae565b611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe906142cf565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611bb45760118054611b2f906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5b906138e4565b8015611ba85780601f10611b7d57610100808354040283529160200191611ba8565b820191906000526020600020905b815481529060010190602001808311611b8b57829003601f168201915b50505050509050611c10565b6000611bbe61254c565b90506000815111611bde5760405180602001604052806000815250611c0c565b80611be8846125de565b600c604051602001611bfc939291906143ae565b6040516020818303038152906040525b9150505b919050565b600e5481565b611c23611fa6565b73ffffffffffffffffffffffffffffffffffffffff16611c4161160c565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613895565b60405180910390fd5b80600c9081611ca69190613f19565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d46611fa6565b73ffffffffffffffffffffffffffffffffffffffff16611d6461160c565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613895565b60405180910390fd5b8060119081611dc99190613f19565b5050565b611dd5611fa6565b73ffffffffffffffffffffffffffffffffffffffff16611df361160c565b73ffffffffffffffffffffffffffffffffffffffff1614611e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4090613895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90614451565b60405180910390fd5b611ec18161240c565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f9f5750611f9e8261273e565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661208d836111d8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120de82611fae565b61211d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612114906144e3565b60405180910390fd5b6000612128836111d8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061219757508373ffffffffffffffffffffffffffffffffffffffff1661217f84610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b806121a857506121a78185611caa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121d1826111d8565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614575565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614607565b60405180910390fd5b6122a18383836127a8565b6122ac60008261201a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122fc9190614627565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612353919061410f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124ec8282604051806020016040528060008152506128ba565b5050565b6124fb8484846121b1565b61250784848484612915565b612546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253d906146cd565b60405180910390fd5b50505050565b6060600b805461255b906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612587906138e4565b80156125d45780601f106125a9576101008083540402835291602001916125d4565b820191906000526020600020905b8154815290600101906020018083116125b757829003601f168201915b5050505050905090565b606060008203612625576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612739565b600082905060005b6000821461265757808061264090613c93565b915050600a82612650919061471c565b915061262d565b60008167ffffffffffffffff81111561267357612672613420565b5b6040519080825280601f01601f1916602001820160405280156126a55781602001600182028036833780820191505090505b5090505b60008514612732576001826126be9190614627565b9150600a856126cd919061474d565b60306126d9919061410f565b60f81b8183815181106126ef576126ee613c35565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561272b919061471c565b94506126a9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127b3838383612a9c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f5576127f081612aa1565b612834565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612833576128328382612aea565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128765761287181612c57565b6128b5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128b4576128b38282612d28565b5b5b505050565b6128c48383612da7565b6128d16000848484612915565b612910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612907906146cd565b60405180910390fd5b505050565b60006129368473ffffffffffffffffffffffffffffffffffffffff16612f74565b15612a8f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261295f611fa6565b8786866040518563ffffffff1660e01b815260040161298194939291906147d3565b6020604051808303816000875af19250505080156129bd57506040513d601f19601f820116820180604052508101906129ba9190614834565b60015b612a3f573d80600081146129ed576040519150601f19603f3d011682016040523d82523d6000602084013e6129f2565b606091505b506000815103612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e906146cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a94565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612af78461130f565b612b019190614627565b9050600060076000848152602001908152602001600020549050818114612be6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c6b9190614627565b9050600060096000848152602001908152602001600020549050600060088381548110612c9b57612c9a613c35565b5b906000526020600020015490508060088381548110612cbd57612cbc613c35565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d0c57612d0b614861565b5b6001900381819060005260206000200160009055905550505050565b6000612d338361130f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d906148dc565b60405180910390fd5b612e1f81611fae565b15612e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5690614948565b60405180910390fd5b612e6b600083836127a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ebb919061410f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fd081612f9b565b8114612fdb57600080fd5b50565b600081359050612fed81612fc7565b92915050565b60006020828403121561300957613008612f91565b5b600061301784828501612fde565b91505092915050565b60008115159050919050565b61303581613020565b82525050565b6000602082019050613050600083018461302c565b92915050565b61305f81613020565b811461306a57600080fd5b50565b60008135905061307c81613056565b92915050565b60006020828403121561309857613097612f91565b5b60006130a68482850161306d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130e95780820151818401526020810190506130ce565b60008484015250505050565b6000601f19601f8301169050919050565b6000613111826130af565b61311b81856130ba565b935061312b8185602086016130cb565b613134816130f5565b840191505092915050565b600060208201905081810360008301526131598184613106565b905092915050565b6000819050919050565b61317481613161565b811461317f57600080fd5b50565b6000813590506131918161316b565b92915050565b6000602082840312156131ad576131ac612f91565b5b60006131bb84828501613182565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131ef826131c4565b9050919050565b6131ff816131e4565b82525050565b600060208201905061321a60008301846131f6565b92915050565b613229816131e4565b811461323457600080fd5b50565b60008135905061324681613220565b92915050565b6000806040838503121561326357613262612f91565b5b600061327185828601613237565b925050602061328285828601613182565b9150509250929050565b61329581613161565b82525050565b60006020820190506132b0600083018461328c565b92915050565b6000806000606084860312156132cf576132ce612f91565b5b60006132dd86828701613237565b93505060206132ee86828701613237565b92505060406132ff86828701613182565b9150509250925092565b60006020828403121561331f5761331e612f91565b5b600061332d84828501613237565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61336b81613161565b82525050565b600061337d8383613362565b60208301905092915050565b6000602082019050919050565b60006133a182613336565b6133ab8185613341565b93506133b683613352565b8060005b838110156133e75781516133ce8882613371565b97506133d983613389565b9250506001810190506133ba565b5085935050505092915050565b6000602082019050818103600083015261340e8184613396565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613458826130f5565b810181811067ffffffffffffffff8211171561347757613476613420565b5b80604052505050565b600061348a612f87565b9050613496828261344f565b919050565b600067ffffffffffffffff8211156134b6576134b5613420565b5b6134bf826130f5565b9050602081019050919050565b82818337600083830152505050565b60006134ee6134e98461349b565b613480565b90508281526020810184848401111561350a5761350961341b565b5b6135158482856134cc565b509392505050565b600082601f83011261353257613531613416565b5b81356135428482602086016134db565b91505092915050565b60006020828403121561356157613560612f91565b5b600082013567ffffffffffffffff81111561357f5761357e612f96565b5b61358b8482850161351d565b91505092915050565b600067ffffffffffffffff8211156135af576135ae613420565b5b602082029050602081019050919050565b600080fd5b60006135d86135d384613594565b613480565b905080838252602082019050602084028301858111156135fb576135fa6135c0565b5b835b8181101561362457806136108882613237565b8452602084019350506020810190506135fd565b5050509392505050565b600082601f83011261364357613642613416565b5b81356136538482602086016135c5565b91505092915050565b60006020828403121561367257613671612f91565b5b600082013567ffffffffffffffff8111156136905761368f612f96565b5b61369c8482850161362e565b91505092915050565b600080604083850312156136bc576136bb612f91565b5b60006136ca85828601613237565b92505060206136db8582860161306d565b9150509250929050565b600067ffffffffffffffff821115613700576136ff613420565b5b613709826130f5565b9050602081019050919050565b6000613729613724846136e5565b613480565b9050828152602081018484840111156137455761374461341b565b5b6137508482856134cc565b509392505050565b600082601f83011261376d5761376c613416565b5b813561377d848260208601613716565b91505092915050565b600080600080608085870312156137a05761379f612f91565b5b60006137ae87828801613237565b94505060206137bf87828801613237565b93505060406137d087828801613182565b925050606085013567ffffffffffffffff8111156137f1576137f0612f96565b5b6137fd87828801613758565b91505092959194509250565b600080604083850312156138205761381f612f91565b5b600061382e85828601613237565b925050602061383f85828601613237565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061387f6020836130ba565b915061388a82613849565b602082019050919050565b600060208201905081810360008301526138ae81613872565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138fc57607f821691505b60208210810361390f5761390e6138b5565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613971602c836130ba565b915061397c82613915565b604082019050919050565b600060208201905081810360008301526139a081613964565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a036021836130ba565b9150613a0e826139a7565b604082019050919050565b60006020820190508181036000830152613a32816139f6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a956038836130ba565b9150613aa082613a39565b604082019050919050565b60006020820190508181036000830152613ac481613a88565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b276031836130ba565b9150613b3282613acb565b604082019050919050565b60006020820190508181036000830152613b5681613b1a565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613bb9602b836130ba565b9150613bc482613b5d565b604082019050919050565b60006020820190508181036000830152613be881613bac565b9050919050565b600081905092915050565b50565b6000613c0a600083613bef565b9150613c1582613bfa565b600082019050919050565b6000613c2b82613bfd565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c9e82613161565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cd057613ccf613c64565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613d37602c836130ba565b9150613d4282613cdb565b604082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613dcf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d92565b613dd98683613d92565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613e16613e11613e0c84613161565b613df1565b613161565b9050919050565b6000819050919050565b613e3083613dfb565b613e44613e3c82613e1d565b848454613d9f565b825550505050565b600090565b613e59613e4c565b613e64818484613e27565b505050565b5b81811015613e8857613e7d600082613e51565b600181019050613e6a565b5050565b601f821115613ecd57613e9e81613d6d565b613ea784613d82565b81016020851015613eb6578190505b613eca613ec285613d82565b830182613e69565b50505b505050565b600082821c905092915050565b6000613ef060001984600802613ed2565b1980831691505092915050565b6000613f098383613edf565b9150826002028217905092915050565b613f22826130af565b67ffffffffffffffff811115613f3b57613f3a613420565b5b613f4582546138e4565b613f50828285613e8c565b600060209050601f831160018114613f835760008415613f71578287015190505b613f7b8582613efd565b865550613fe3565b601f198416613f9186613d6d565b60005b82811015613fb957848901518255600182019150602085019450602081019050613f94565b86831015613fd65784890151613fd2601f891682613edf565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006140476029836130ba565b915061405282613feb565b604082019050919050565b600060208201905081810360008301526140768161403a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006140d9602a836130ba565b91506140e48261407d565b604082019050919050565b60006020820190508181036000830152614108816140cc565b9050919050565b600061411a82613161565b915061412583613161565b925082820190508082111561413d5761413c613c64565b5b92915050565b7f4d617820737570706c7920657863656564000000000000000000000000000000600082015250565b60006141796011836130ba565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b60006141ba82613161565b91506141c583613161565b92508282026141d381613161565b915082820484148315176141ea576141e9613c64565b5b5092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006142276019836130ba565b9150614232826141f1565b602082019050919050565b600060208201905081810360008301526142568161421a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006142b9602f836130ba565b91506142c48261425d565b604082019050919050565b600060208201905081810360008301526142e8816142ac565b9050919050565b600081905092915050565b6000614305826130af565b61430f81856142ef565b935061431f8185602086016130cb565b80840191505092915050565b60008154614338816138e4565b61434281866142ef565b9450600182166000811461435d5760018114614372576143a5565b60ff19831686528115158202860193506143a5565b61437b85613d6d565b60005b8381101561439d5781548189015260018201915060208101905061437e565b838801955050505b50505092915050565b60006143ba82866142fa565b91506143c682856142fa565b91506143d2828461432b565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061443b6026836130ba565b9150614446826143df565b604082019050919050565b6000602082019050818103600083015261446a8161442e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144cd602c836130ba565b91506144d882614471565b604082019050919050565b600060208201905081810360008301526144fc816144c0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061455f6029836130ba565b915061456a82614503565b604082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145f16024836130ba565b91506145fc82614595565b604082019050919050565b60006020820190508181036000830152614620816145e4565b9050919050565b600061463282613161565b915061463d83613161565b925082820390508181111561465557614654613c64565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146b76032836130ba565b91506146c28261465b565b604082019050919050565b600060208201905081810360008301526146e6816146aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061472782613161565b915061473283613161565b925082614742576147416146ed565b5b828204905092915050565b600061475882613161565b915061476383613161565b925082614773576147726146ed565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006147a58261477e565b6147af8185614789565b93506147bf8185602086016130cb565b6147c8816130f5565b840191505092915050565b60006080820190506147e860008301876131f6565b6147f560208301866131f6565b614802604083018561328c565b8181036060830152614814818461479a565b905095945050505050565b60008151905061482e81612fc7565b92915050565b60006020828403121561484a57614849612f91565b5b60006148588482850161481f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006148c66020836130ba565b91506148d182614890565b602082019050919050565b600060208201905081810360008301526148f5816148b9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614932601c836130ba565b915061493d826148fc565b602082019050919050565b6000602082019050818103600083015261496181614925565b905091905056fea2646970667358221220b40dc714474c3c422dd4b455f5bb776049ae214d0dabd976282c45dd723e96c764736f6c63430008120033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000013524f544420434f4d4943205041474520534958000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005524f544436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d4e614457764857384d4864536b73486875754a384473326f754a3745624661477864694167756a53487764412f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000