From: authorNari Date: 2008-07-19T10:43:10+09:00 Subject: [ruby-dev:35589] Re: make profiler for gc ------=_Part_105329_31348362.1216432099280 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline nariです。 > 個人的にはこんな方が好みです。 > > * GC::Profiler.enable? > * GC::Profiler.enable > * GC::Profiler.disable > * GC::Profiler.format # GC.display相当を文字列で返す > * GC::Profiler.report # formatを出力 > * GC::Profiler.data # GC.report おぉ、すごく分かりやすい名前だと思います。 ということで早速変更してみました。 ==追加されるモジュール * GC::Profiler **GCにおけるProfile情報を扱う ==追加されるメソッド * GC::Profiler.enable? ** Profilerが起動しているか? * GC::Profiler.enable= ** Profiler起動 true false * GC::Profiler.disable= ** Profiler停止 true false * GC::Profiler.format ** プロファイル情報、Heapの詳細情報の文字列返却 *** (この前のメールのGC.dispalyで出力されるものが文字列で返ってくる) * GC::Profiler.report ** GC::Profiler.formatの文字列出力 * GC::Prifler.data ** GC::Profiler.displayで表示する元データをHashで返却 その他のメソッドについては先のメールと同じ ==パッチ 今回も添付しています。 と言う事でよさそうだったらコミットしたいのですが、いかがでしょうか? ------=_Part_105329_31348362.1216432099280 Content-Type: text/x-diff; name=gc_profile_by_profiler_module.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fitk5hsa0 Content-Disposition: attachment; filename=gc_profile_by_profiler_module.diff SW5kZXg6IHByZWx1ZGUucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHJlbHVkZS5yYgko44Oq44OT44K444On 44OzIDE4MTMyKQorKysgcHJlbHVkZS5yYgko5L2c5qWt44Kz44OU44O8KQpAQCAtMzMsMyArMzMs MzIgQEAKICAgYWJzb2x1dGVfZmVhdHVyZSA9IEZpbGUuZXhwYW5kX3BhdGgoRmlsZS5qb2luKEZp bGUuZGlybmFtZShmaWxlKSwgcmVsYXRpdmVfZmVhdHVyZSkpCiAgIHJlcXVpcmUgYWJzb2x1dGVf ZmVhdHVyZQogZW5kCisKK21vZHVsZSBHQzo6UHJvZmlsZXIKKyAgZGVmIHNlbGYuZm9ybWF0KCkK KyAgICByZXBfZGF0YSA9IHNlbGYuZGF0YQorICAgIGhfaW5mID0gT2JqZWN0U3BhY2UuY291bnRf Y2xhc3NlcworICAgIHByb2YgPSBzcHJpbnRmKCJHQyAlMSRkIGludm9rZXMuXG4iLCBHQy5jb3Vu dCkKKworICAgIGlmIEdDOjpQcm9maWxlci5lbmFibGU/IGFuZCAhcmVwX2RhdGEuZW1wdHk/Cisg ICAgICBwcm9mICs9ICJJbmRleCAgICAgICBVc2UgU2l6ZShieXRlKSAgICAgVG90YWwgU2l6ZShi eXRlKSAgICAgICAgIFRvdGFsIE9iamVjdCAgICAgICAgICAgICAgICAgICAgR0MgdGltZShtcylc biIKKyAgICAgIHJlcF9kYXRhLmVhY2hfd2l0aF9pbmRleCBkbyB8ZSwgaXwKKyAgICAgICAgcHJv ZiArPSBzcHJpbnRmKCIlMSQ1ZCAlMiQyMGQgJTMkMjBkICU0JDIwZCAlNSQzMC4yMGZcbiIsIGks IGVbOkhFQVBfVVNFX1NJWkVdLCBlWzpIRUFQX1RPVEFMX1NJWkVdLCBlWzpIRUFQX1RPVEFMX09C SkVDVFNdLCBlWzpHQ19USU1FXSoxMDApCisgICAgICBlbmQKKyAgICAgIHByb2YgKz0gIlxuXG4i CisgICAgZW5kCisKKyAgICBwcm9mICs9IHNwcmludGYoIiUxJGQgdXNlZCBvYmplY3RzICUyJGQg ZnJlZSBvYmplY3RzIGFuZCAlMyRkIHRvdGFsIG9iamVjdHMgaW4gSGVhcC5cbiIsIGhfaW5mWzpU T1RBTF0gLSBoX2luZls6RlJFRV0sIGhfaW5mWzpGUkVFXSwgaF9pbmZbOlRPVEFMXSkKKyAgICBw cm9mICs9ICJJbmRleCAgICAgICAgICAgICAgICBDb3VudCAgICAgICAgICAgICAgICAgICAgJSAg ICAgICAgICBLaW5kIChjbGFzcylcbiIKKyAgICBoX2luZi50b19hLnNvcnR7fGIsIGF8IGFbMV0g PD0+IGJbMV0gfS5lYWNoX3dpdGhfaW5kZXggZG8gfGUsIGl8CisgICAgICAgdW5sZXNzICV3IkZS RUUgVE9UQUwiLmluY2x1ZGU/IGVbMF0udG9fcworICAgICAgICAgcHJvZiArPSBzcHJpbnRmKCIl MSQ1ZCAlMiQyMGQgJTMkMjAuOGYgJTQkMjBzXG4iLCBpLCBlWzFdLCBlWzFdLnRvX2YvaF9pbmZb OlRPVEFMXS50b19mKjEwMCwgZVswXSkKKyAgICAgICBlbmQKKyAgICBlbmQKKyAgICByZXR1cm4g cHJvZgorICBlbmQKKworICBkZWYgc2VsZi5yZXBvcnQob3V0PSRzdGRvdXQpCisgICAgb3V0LnB1 dHMgc2VsZi5mb3JtYXQKKyAgZW5kCitlbmQKSW5kZXg6IGdjLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Mu Ywko44Oq44OT44K444On44OzIDE4MTMyKQorKysgZ2MuYwko5L2c5qWt44Kz44OU44O8KQpAQCAt OTIsNiArOTIsMTI4IEBACiAKICN1bmRlZiBHQ19ERUJVRwogCisvKiBmb3IgR0MgcHJvZmlsZSAq LworI2RlZmluZSBHQ19QUk9GSUxFX01PUkVfREVUQUlMIDAKK3R5cGVkZWYgc3RydWN0IGdjX3By b2ZpbGVfZGF0YSB7CisgICAgZG91YmxlIGdjX3RpbWU7CisgICAgZG91YmxlIGdjX21hcmtfdGlt ZTsKKyAgICBkb3VibGUgZ2Nfc3dlZXBfdGltZTsKKyAgICBzaXplX3QgaGVhcF91c2Vfc2xvdHM7 CisgICAgc2l6ZV90IGhlYXBfbGl2ZV9vYmplY3RzOworICAgIHNpemVfdCBoZWFwX2ZyZWVfb2Jq ZWN0czsKKyAgICBzaXplX3QgaGVhcF90b3RhbF9vYmplY3RzOworICAgIHNpemVfdCBoZWFwX3Vz ZV9zaXplOworICAgIHNpemVfdCBoZWFwX3RvdGFsX3NpemU7CisgICAgaW50IGhhdmVfZmluYWxp emU7CisgICAgc2l6ZV90IGFsbG9jYXRlX2luY3JlYXNlOworICAgIHNpemVfdCBhbGxvY2F0ZV9s aW1pdDsKK30gZ2NfcHJvZmlsZV9kYXRhOworCisvKiByZWZlcmVuY2VkIGRvY3VtZW50IGh0dHA6 Ly9rems5Lm5ldC9jb2x1bW4vdGltZS5odG1sICovCitzdGF0aWMgZG91YmxlCitnZXRydXNhZ2Vf dGltZSh2b2lkKQoreworICAgIHN0cnVjdCBydXNhZ2UgdXNhZ2U7CisgICAgc3RydWN0IHRpbWV2 YWwgdGltZTsKKyAgICBnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZ1c2FnZSk7CisgICAgdGltZSA9 IHVzYWdlLnJ1X3V0aW1lOworICAgIHJldHVybiB0aW1lLnR2X3NlYyArIChkb3VibGUpdGltZS50 dl91c2VjKjFlLTY7Cit9CisKKyNkZWZpbmUgR0NfUFJPRl9USU1FUl9TVEFSVCBkbyB7XAorCWlm IChydWJ5X2djX3Byb2ZpbGUpIHtcCisJICAgIGlmICghb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSkg e1wKKwkJb2Jqc3BhY2UtPnByb2ZpbGUuc2l6ZSA9IDEwMDA7XAorCQlvYmpzcGFjZS0+cHJvZmls ZS5kYXRhID0gbWFsbG9jKHNpemVvZihnY19wcm9maWxlX2RhdGEpICogb2Jqc3BhY2UtPnByb2Zp bGUuc2l6ZSk7XAorCSAgICB9XAorCSAgICBpZiAoY291bnQgPj0gb2Jqc3BhY2UtPnByb2ZpbGUu c2l6ZSkge1wKKwkJb2Jqc3BhY2UtPnByb2ZpbGUuc2l6ZSArPSAxMDAwO1wKKwkJb2Jqc3BhY2Ut PnByb2ZpbGUuZGF0YSA9IHJlYWxsb2Mob2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSwgc2l6ZW9mKGdj X3Byb2ZpbGVfZGF0YSkgKiBvYmpzcGFjZS0+cHJvZmlsZS5zaXplKTtcCisJICAgIH1cCisJICAg IGlmICghb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSkge1wKKwkJcmJfYnVnKCJnY19wcm9maWxlIG1h bGxvYyBvciByZWFsbG9jIG1pc3MiKTtcCisJICAgIH1cCisJICAgIE1FTVpFUk8oJm9ianNwYWNl LT5wcm9maWxlLmRhdGFbY291bnRdLCBnY19wcm9maWxlX2RhdGEsIDEpO1wKKwkgICAgZ2NfdGlt ZSA9IGdldHJ1c2FnZV90aW1lKCk7XAorCX1cCisgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIEdD X1BST0ZfVElNRVJfU1RPUCBkbyB7XAorCWlmIChydWJ5X2djX3Byb2ZpbGUpIHtcCisJICAgIGdj X3RpbWUgPSBnZXRydXNhZ2VfdGltZSgpIC0gZ2NfdGltZTtcCisJICAgIG9ianNwYWNlLT5wcm9m aWxlLmRhdGFbY291bnRdLmdjX3RpbWUgPSBnY190aW1lO1wKKwkgICAgb2Jqc3BhY2UtPnByb2Zp bGUuY291bnQrKztcCisJfVwKKyAgICB9IHdoaWxlKDApCisKKyNpZiBHQ19QUk9GSUxFX01PUkVf REVUQUlMCisjZGVmaW5lIElOSVRfR0NfUFJPRl9QQVJBTVMgZG91YmxlIGdjX3RpbWUgPSAwLCBt YXJrX3RpbWUgPSAwLCBzd2VlcF90aW1lID0gMDsJXAorICAgIHNpemVfdCBjb3VudCA9IG9ianNw YWNlLT5wcm9maWxlLmNvdW50CisKKyNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJTUVSX1NUQVJUIGRv IHtcCisJaWYgKHJ1YnlfZ2NfcHJvZmlsZSkge1wKKwkgICAgbWFya190aW1lID0gZ2V0cnVzYWdl X3RpbWUoKTtcCisJfVwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJ TUVSX1NUT1AgZG8ge1wKKwlpZiAocnVieV9nY19wcm9maWxlKSB7XAorCSAgICBtYXJrX3RpbWUg PSBnZXRydXNhZ2VfdGltZSgpIC0gbWFya190aW1lO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUu ZGF0YVtjb3VudF0uZ2NfbWFya190aW1lID0gbWFya190aW1lO1wKKwl9XAorICAgIH0gd2hpbGUo MCkKKworI2RlZmluZSBHQ19QUk9GX1NXRUVQX1RJTUVSX1NUQVJUIGRvIHsJCVwKKwlpZiAocnVi eV9nY19wcm9maWxlKSB7CQkJXAorCSAgICBzd2VlcF90aW1lID0gZ2V0cnVzYWdlX3RpbWUoKTsJ XAorCX0JCQkJCVwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgR0NfUFJPRl9TV0VFUF9USU1F Ul9TVE9QIGRvIHtcCisJaWYgKHJ1YnlfZ2NfcHJvZmlsZSkge1wKKwkgICAgc3dlZXBfdGltZSA9 IGdldHJ1c2FnZV90aW1lKCkgLSBzd2VlcF90aW1lO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUu ZGF0YVtjb3VudF0uZ2Nfc3dlZXBfdGltZSA9IHN3ZWVwX3RpbWU7XAorCX1cCisgICAgfSB3aGls ZSgwKQorI2RlZmluZSBHQ19QUk9GX1NFVF9NQUxMT0NfSU5GTyBkbyB7XAorCWlmIChydWJ5X2dj X3Byb2ZpbGUpIHtcCisJICAgIHNpemVfdCBjb3VudCA9IG9ianNwYWNlLT5wcm9maWxlLmNvdW50 O1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3VudF0uYWxsb2NhdGVfaW5jcmVhc2Ug PSBtYWxsb2NfaW5jcmVhc2U7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2NvdW50XS5h bGxvY2F0ZV9saW1pdCA9IG1hbGxvY19saW1pdDsgXAorCX1cCisgICAgfSB3aGlsZSgwKQorI2Rl ZmluZSBHQ19QUk9GX1NFVF9IRUFQX0lORk8gZG8ge1wKKwlpZiAocnVieV9nY19wcm9maWxlKSB7 XAorCSAgICBzaXplX3QgY291bnQgPSBvYmpzcGFjZS0+cHJvZmlsZS5jb3VudDtcCisJICAgIG9i anNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBfdXNlX3Nsb3RzID0gaGVhcHNfdXNlZDtc CisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBfbGl2ZV9vYmplY3RzID0g bGl2ZTtcCisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBfZnJlZV9vYmpl Y3RzID0gZnJlZWQ7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2NvdW50XS5oZWFwX3Rv dGFsX29iamVjdHMgPSBoZWFwc191c2VkICogSEVBUF9PQkpfTElNSVQ7XAorCSAgICBvYmpzcGFj ZS0+cHJvZmlsZS5kYXRhW2NvdW50XS5oYXZlX2ZpbmFsaXplID0gZmluYWxfbGlzdCA/IFF0cnVl IDogUWZhbHNlO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3VudF0uaGVhcF91c2Vf c2l6ZSA9IGxpdmUgKiBzaXplb2YoUlZBTFVFKTtcCisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRh dGFbY291bnRdLmhlYXBfdG90YWxfc2l6ZSA9IGhlYXBzX3VzZWQgKiAoSEVBUF9PQkpfTElNSVQg KiBzaXplb2YoUlZBTFVFKSk7XAorCX1cCisgICAgfSB3aGlsZSgwKQorCisjZWxzZQorI2RlZmlu ZSBJTklUX0dDX1BST0ZfUEFSQU1TIGRvdWJsZSBnY190aW1lID0gMDtcCisgICAgc2l6ZV90IGNv dW50ID0gb2Jqc3BhY2UtPnByb2ZpbGUuY291bnQKKyNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJTUVS X1NUQVJUCisjZGVmaW5lIEdDX1BST0ZfTUFSS19USU1FUl9TVE9QCisjZGVmaW5lIEdDX1BST0Zf U1dFRVBfVElNRVJfU1RBUlQKKyNkZWZpbmUgR0NfUFJPRl9TV0VFUF9USU1FUl9TVE9QCisjZGVm aW5lIEdDX1BST0ZfU0VUX01BTExPQ19JTkZPCisjZGVmaW5lIEdDX1BST0ZfU0VUX0hFQVBfSU5G TyBkbyB7XAorCWlmIChydWJ5X2djX3Byb2ZpbGUpIHtcCisJICAgIHNpemVfdCBjb3VudCA9IG9i anNwYWNlLT5wcm9maWxlLmNvdW50O1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3Vu dF0uaGVhcF90b3RhbF9vYmplY3RzID0gaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJTUlUO1wKKwkg ICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3VudF0uaGVhcF91c2Vfc2l6ZSA9IGxpdmUgKiBz aXplb2YoUlZBTFVFKTtcCisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBf dG90YWxfc2l6ZSA9IGhlYXBzX3VzZWQgKiBIRUFQX1NJWkU7XAorCX1cCisgICAgfSB3aGlsZSgw KQorI2VuZGlmCisKKwogI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5E Q19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjcHJhZ21hIHBhY2socHVzaCwgMSkgLyogbWFn aWMgZm9yIHJlZHVjaW5nIHNpemVvZihSVkFMVUUpOiAyNCAtPiAyMCAqLwogI2VuZGlmCkBAIC0x NzYsNiArMjk4LDEyIEBACiAJVkFMVUUgKnB0cjsKIAlpbnQgb3ZlcmZsb3c7CiAgICAgfSBtYXJr c3RhY2s7CisgICAgc3RydWN0IHsKKwlpbnQgcnVuOworCWdjX3Byb2ZpbGVfZGF0YSAqZGF0YTsK KwlzaXplX3QgY291bnQ7CisJc2l6ZV90IHNpemU7CisgICAgfSBwcm9maWxlOwogICAgIHN0cnVj dCBnY19saXN0ICpnbG9iYWxfbGlzdDsKICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CiAgICAgaW50 IGdjX3N0cmVzczsKQEAgLTIwOSw2ICszMzcsNyBAQAogI2RlZmluZSBtYXJrX3N0YWNrX292ZXJm bG93CW9ianNwYWNlLT5tYXJrc3RhY2sub3ZlcmZsb3cKICNkZWZpbmUgZ2xvYmFsX0xpc3QJCW9i anNwYWNlLT5nbG9iYWxfbGlzdAogI2RlZmluZSBydWJ5X2djX3N0cmVzcwkJb2Jqc3BhY2UtPmdj X3N0cmVzcworI2RlZmluZSBydWJ5X2djX3Byb2ZpbGUJCW9ianNwYWNlLT5wcm9maWxlLnJ1bgog CiAjZGVmaW5lIG5lZWRfY2FsbF9maW5hbCAJKGZpbmFsaXplcl90YWJsZSAmJiBmaW5hbGl6ZXJf dGFibGUtPm51bV9lbnRyaWVzKQogCkBAIC0zMDksNiArNDM4LDY1IEBACiAgICAgcmV0dXJuIGJv b2w7CiB9CiAKKy8qCisgKiAgY2FsbC1zZXE6CisgKiAgICBHQzo6UHJvZmlsZXIuZW5hYmxlPyAg ICAgICAgICAgICAgICAgPT4gdHJ1ZSBvciBmYWxzZQorICoKKyAqICByZXR1cm5zIGN1cnJlbnQg c3RhdHVzIG9mIEdDIHByb2ZpbGUgbW9kZS4KKyAqLworCitzdGF0aWMgVkFMVUUKK2djX3Byb2Zp bGVfZW5hYmxlX2dldChWQUxVRSBzZWxmKQoreworICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNl ID0gJnJiX29ianNwYWNlOworICAgIHJldHVybiBydWJ5X2djX3Byb2ZpbGUgPyBRdHJ1ZSA6IFFm YWxzZTsKK30KKworLyoKKyAqICBjYWxsLXNlcToKKyAqICAgIEdDOjpQcm9maWxlci5lbmFibGUg PSBib29sICAgICAgICAgID0+IGJvb2wKKyAqCisgKiAgdXBkYXRlcyBHQyBwcm9maWxlIG1vZGUu CisgKgorICogIFdoZW4gR0M6OlByb2ZpbGVyLmVuYWJsZSA9IHRydWUsIHJ1biBwcm9maWxlciBm b3IgR0MuCisgKgorICogIFdoZW4gR0M6OlByb2ZpbGVyLmVuYWJsZSA9IGZhbHNlLCBkZWxldGUg YmVmb3JlIHByb2ZpbGVyIGRhdGEsIGFuZCBzdG9wIHByb2ZpbGVyIGZvciBHQy4KKyAqCisgKi8K Kworc3RhdGljIFZBTFVFCitnY19wcm9maWxlX2VuYWJsZV9zZXQoVkFMVUUgc2VsZiwgVkFMVUUg Ym9vbCkKK3sKKyAgICByYl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9ICZyYl9vYmpzcGFjZTsKKyAg ICByYl9zZWN1cmUoMik7CisgICAgcnVieV9nY19wcm9maWxlID0gUlRFU1QoYm9vbCk7CisgICAg aWYgKCFydWJ5X2djX3Byb2ZpbGUpIHsKKwlNRU1aRVJPKG9ianNwYWNlLT5wcm9maWxlLmRhdGEs IGdjX3Byb2ZpbGVfZGF0YSwgb2Jqc3BhY2UtPnByb2ZpbGUuc2l6ZSk7CisJb2Jqc3BhY2UtPnBy b2ZpbGUuY291bnQgPSAwOworICAgIH0KKyAgICByZXR1cm4gYm9vbDsKK30KKworLyoKKyAqICBj YWxsLXNlcToKKyAqICAgIEdDOjpQcm9maWxlci5kaXNhYmxlID0gYm9vbCAgICAgICAgICA9PiBi b29sCisgKgorICogIHVwZGF0ZXMgR0MgcHJvZmlsZSBtb2RlLgorICoKKyAqICBXaGVuIEdDOjpQ cm9maWxlci5kaXNhYmxlID0gdHJ1ZSwgZGVsZXRlIGJlZm9yZSBwcm9maWxlciBkYXRhLCBhbmQg c3RvcCBwcm9maWxlciBmb3IgR0MuCisgKgorICogIFdoZW4gR0M6OlByb2ZpbGVyLmRpc2FibGUg PSBmYWxzZSwgcnVuIHByb2ZpbGVyIGZvciBHQy4KKyAqCisgKi8KKworc3RhdGljIFZBTFVFCitn Y19wcm9maWxlX2Rpc2FibGVfc2V0KFZBTFVFIHNlbGYsIFZBTFVFIGJvb2wpCit7CisgICAgcmJf c2VjdXJlKDIpOworICAgIGJvb2wgPSBSVEVTVChib29sKSA/IFFmYWxzZSA6IFF0cnVlOworICAg IHJldHVybiBnY19wcm9maWxlX2VuYWJsZV9zZXQoc2VsZiwgYm9vbCk7Cit9CisKIHN0YXRpYyB2 b2lkICoKIHZtX3htYWxsb2MocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHNpemVfdCBzaXplKQog ewpAQCAtMTQ0MCw2ICsxNjI4LDcgQEAKIAkgICAgZnJlZWQgKz0gbjsKIAl9CiAgICAgfQorICAg IEdDX1BST0ZfU0VUX01BTExPQ19JTkZPOwogICAgIGlmIChtYWxsb2NfaW5jcmVhc2UgPiBtYWxs b2NfbGltaXQpIHsKIAltYWxsb2NfbGltaXQgKz0gKG1hbGxvY19pbmNyZWFzZSAtIG1hbGxvY19s aW1pdCkgKiAoZG91YmxlKWxpdmUgLyAobGl2ZSArIGZyZWVkKTsKIAlpZiAobWFsbG9jX2xpbWl0 IDwgR0NfTUFMTE9DX0xJTUlUKSBtYWxsb2NfbGltaXQgPSBHQ19NQUxMT0NfTElNSVQ7CkBAIC0x NDUzLDEwICsxNjQyLDEyIEBACiAKICAgICAvKiBjbGVhciBmaW5hbGl6YXRpb24gbGlzdCAqLwog ICAgIGlmIChmaW5hbF9saXN0KSB7CisJR0NfUFJPRl9TRVRfSEVBUF9JTkZPOwogCWRlZmVycmVk X2ZpbmFsX2xpc3QgPSBmaW5hbF9saXN0OwogCXJldHVybjsKICAgICB9CiAgICAgZnJlZV91bnVz ZWRfaGVhcHMob2Jqc3BhY2UpOworICAgIEdDX1BST0ZfU0VUX0hFQVBfSU5GTzsKIH0KIAogdm9p ZApAQCAtMTY3Miw2ICsxODYzLDcgQEAKIHsKICAgICBzdHJ1Y3QgZ2NfbGlzdCAqbGlzdDsKICAg ICByYl90aHJlYWRfdCAqdGggPSBHRVRfVEhSRUFEKCk7CisgICAgSU5JVF9HQ19QUk9GX1BBUkFN UzsKIAogICAgIGlmIChHQ19OT1RJRlkpIHByaW50Zigic3RhcnQgZ2FyYmFnZV9jb2xsZWN0KClc biIpOwogCkBAIC0xNjkxLDYgKzE4ODMsOCBAQAogICAgIGR1cmluZ19nYysrOwogICAgIG9ianNw YWNlLT5jb3VudCsrOwogCisgICAgR0NfUFJPRl9USU1FUl9TVEFSVDsKKyAgICBHQ19QUk9GX01B UktfVElNRVJfU1RBUlQ7CiAgICAgU0VUX1NUQUNLX0VORDsKIAogICAgIGluaXRfbWFya19zdGFj ayhvYmpzcGFjZSk7CkBAIC0xNzMxLDkgKzE5MjUsMTMgQEAKIAkgICAgZ2NfbWFya19yZXN0KG9i anNwYWNlKTsKIAl9CiAgICAgfQorICAgIEdDX1BST0ZfTUFSS19USU1FUl9TVE9QOwogCisgICAg R0NfUFJPRl9TV0VFUF9USU1FUl9TVEFSVDsKICAgICBnY19zd2VlcChvYmpzcGFjZSk7CisgICAg R0NfUFJPRl9TV0VFUF9USU1FUl9TVE9QOwogCisgICAgR0NfUFJPRl9USU1FUl9TVE9QOwogICAg IGlmIChHQ19OT1RJRlkpIHByaW50ZigiZW5kIGdhcmJhZ2VfY29sbGVjdCgpXG4iKTsKICAgICBy ZXR1cm4gUXRydWU7CiB9CkBAIC0yMzAwLDYgKzI0OTgsNyBAQAogICAgIH0KICAgICByYl9oYXNo X2FzZXQoaGFzaCwgSUQyU1lNKHJiX2ludGVybigiVE9UQUwiKSksIFNJWkVUMk5VTSh0b3RhbCkp OwogICAgIHJiX2hhc2hfYXNldChoYXNoLCBJRDJTWU0ocmJfaW50ZXJuKCJGUkVFIikpLCBTSVpF VDJOVU0oZnJlZWQpKTsKKwogICAgIGZvciAoaSA9IDA7IGkgPD0gVF9NQVNLOyBpKyspIHsKICAg ICAgICAgVkFMVUUgdHlwZTsKICAgICAgICAgc3dpdGNoIChpKSB7CkBAIC0yMzQwLDYgKzI1Mzks ODcgQEAKIAogLyoKICAqICBjYWxsLXNlcToKKyAqICAgICBPYmplY3RTcGFjZS5jb3VudF9jbGFz c2VzKFtyZXN1bHRfaGFzaF0pIC0+IGhhc2gKKyAqCisgKiAgQ291bnRzIGNsYXNzZXMgZm9yIGVh Y2ggdHlwZS4KKyAqCisgKiAgSXQgcmV0dXJucyBhIGhhc2ggYXM6CisgKiAgezpUT1RBTD0+MTAw MDAsIDpGUkVFPT4zMDExLCA6U3RyaW5nPT42LCA6QXJyYXk9PjQwNCwgLi4ufQorICoKKyAqICBJ ZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQsIHJlc3VsdF9oYXNoLCBpcyBnaXZlbiwKKyAqICBpdCBp cyBvdmVyd3JpdHRlbiBhbmQgcmV0dXJuZWQuCisgKiAgVGhpcyBpcyBpbnRlbmRlZCB0byBhdm9p ZCBwcm9iZSBlZmZlY3QuCisgKgorICogIFRoZSBjb250ZW50cyBvZiB0aGUgcmV0dXJuZWQgaGFz aCBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgorICovCisKK1ZBTFVFCitjb3VudF9jbGFzc2Vz KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgb3MpCit7CisgICAgVkFMVUUgaGFzaDsKKyAg ICByYl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9ICgmcmJfb2Jqc3BhY2UpOworICAgIFZBTFVFIHN5 bXMgPSByYl9hcnlfbmV3KCk7CisgICAgc3RfdGFibGUgKnRhYmxlOworICAgIHN0X2RhdGFfdCAq Y250OworICAgIHNpemVfdCBmcmVlX29ianM9IDAsIHRvdGFsX29ianMgPSAwLCBpID0gMDsKKwor ICAgIGlmIChyYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAxIiwgJmhhc2gpID09IDEpIHsKKyAg ICAgICAgaWYgKFRZUEUoaGFzaCkgIT0gVF9IQVNIKQorICAgICAgICAgICAgcmJfcmFpc2UocmJf ZVR5cGVFcnJvciwgIm5vbi1oYXNoIGdpdmVuIik7CisgICAgfQorCisgICAgdGFibGUgPSBzdF9p bml0X251bXRhYmxlKCk7CisgICAgY250ID0gdm1feG1hbGxvYyhvYmpzcGFjZSwgc2l6ZW9mKHN0 X2RhdGFfdCkpOworICAgIGZvciAoaSA9IDA7IGkgPCBoZWFwc191c2VkOyBpKyspIHsKKyAgICAg ICAgUlZBTFVFICpwLCAqcGVuZDsKKyAgICAgICAgSUQgc3ltOworCisgICAgICAgIHAgPSBoZWFw c1tpXS5zbG90OyBwZW5kID0gcCArIGhlYXBzW2ldLmxpbWl0OworICAgICAgICBmb3IgKDtwIDwg cGVuZDsgcCsrKSB7CisJICAgICpjbnQgPSAxOworCSAgICBpZiAoQlVJTFRJTl9UWVBFKHApICE9 IDAgJiYgUkFOWShwKS0+YXMuYmFzaWMuZmxhZ3MpIHsgCisJCXN5bSA9IHJiX2ludGVybihyYl9v YmpfY2xhc3NuYW1lKChWQUxVRSlwKSk7CisJCWlmIChzdF9sb29rdXAodGFibGUsIChzdF9kYXRh X3Qpc3ltLCBjbnQpKSB7CisJCSAgICAqY250ID0gKmNudCArIDE7CisJCSAgICBzdF9pbnNlcnQo dGFibGUsIChzdF9kYXRhX3Qpc3ltLCAqY250KTsKKwkJfSBlbHNlIHsKKwkJICAgIHJiX2FyeV9w dXNoKHN5bXMsIElEMlNZTShzeW0pKTsKKwkJICAgIHN0X2FkZF9kaXJlY3QodGFibGUsIChzdF9k YXRhX3Qpc3ltLCAqY250KTsKKwkJfQorCSAgICB9CisJICAgIGVsc2UgeworCQlmcmVlX29ianMr KzsKKwkgICAgfQorCX0KKwl0b3RhbF9vYmpzICs9IGhlYXBzW2ldLmxpbWl0OworICAgIH0KKwor ICAgIGlmIChoYXNoID09IFFuaWwpIHsKKyAgICAgICAgaGFzaCA9IHJiX2hhc2hfbmV3KCk7Cisg ICAgfQorICAgIGVsc2UgaWYgKCFSSEFTSF9FTVBUWV9QKGhhc2gpKSB7CisgICAgICAgIHN0X2Zv cmVhY2goUkhBU0hfVEJMKGhhc2gpLCBzZXRfemVybywgaGFzaCk7CisgICAgfQorCisgICAgcmJf aGFzaF9hc2V0KGhhc2gsIElEMlNZTShyYl9pbnRlcm4oIlRPVEFMIikpLCByYl91aW50MmludW0o dG90YWxfb2JqcykpOworICAgIHJiX2hhc2hfYXNldChoYXNoLCBJRDJTWU0ocmJfaW50ZXJuKCJG UkVFIikpLCByYl91aW50MmludW0oZnJlZV9vYmpzKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg UkFSUkFZX0xFTihzeW1zKTsgaSsrKSB7CisJVkFMVUUgc3ltOworCXN5bSA9IHJiX2FyeV9lbnRy eShzeW1zLCBpKTsKKwlpZiAoc3RfbG9va3VwKHRhYmxlLCAoVkFMVUUpU1lNMklEKHN5bSksIGNu dCkpIHsKKwkgICAgcmJfaGFzaF9hc2V0KGhhc2gsIHN5bSwgcmJfdWludDJpbnVtKCpjbnQpKTsK Kwl9CisgICAgfQorCisgICAgdm1feGZyZWUob2Jqc3BhY2UsIGNudCk7CisgICAgc3RfZnJlZV90 YWJsZSh0YWJsZSk7CisKKyAgICByZXR1cm4gaGFzaDsKK30KKworLyoKKyAqICBjYWxsLXNlcToK ICAqICAgICBHQy5jb3VudCAtPiBJbnRlZ2VyCiAgKgogICogIFRoZSBudW1iZXIgb2YgdGltZXMg R0Mgb2NjdXJlZC4KQEAgLTIzODcsNiArMjY2Nyw1NSBAQAogI2VuZGlmCiAKIC8qCisgKiAgY2Fs bC1zZXE6CisgKiAgICAgR0M6OlByb2ZpbGVyLmRhdGEgLT4gaGFzaAorICoKKyAqICBSZXBvcnQg cHJvZmlsZSBkYXRhIHRvIHdyYXAgaGFzaC4KKyAqCisgKiAgSXQgcmV0dXJucyBhIGhhc2ggYXM6 CisgKiAgW3s6R0NfVElNRSA9PiAwLjAwMSwgOkhFQVBfVVNFX1NJWkUgPT4gMzQyODQwLCA6SEVB UF9UT1RBTF9TSVpFPT4zNjAzNjB9LCAuLi4gXQorICoKKyAqICBpZiBHQ19QUk9GSUxFX01PUkVf REVUQUlMIGlzIDE6CisgKiAgW3s6R0NfVElNRT0+MC4wMDQsIDpIRUFQX1VTRV9TSVpFPT4zNDI4 NDAsIDpIRUFQX1RPVEFMX1NJWkU9PjM2MDM2MCwgOkdDX01BUktfVElNRT0+LTUuMjg1NDg1NTkw ODY2ODNlLTE5LAorICogICAgICA6R0NfU1dFRVBfVElNRT0+MC4wMDQsIDpBTExPQ0FURV9JTkNS RUFTRT0+NDA0NzAsIDpBTExPQ0FURV9MSU1JVD0+ODAwMDAwMCwgOkhFQVBfVVNFX1NMT1RTPT4y MiwKKyAqICAgICAgOkhFQVBfTElWRV9PQkpFQ1RTPT4xNzE0MiwgOkhFQVBfRlJFRV9PQkpFQ1RT PT40NCwgOkhFQVBfVE9UQUxfT0JKRUNUUz0+MTgwMTgsIDpIQVZFX0ZJTkFMSVpFPT5mYWxzZX0s IC4uIF0KKyAqLworCitWQUxVRQorZ2NfcHJvZmlsZV9kYXRhX2dldCh2b2lkKQoreworICAgIFZB TFVFIHByb2Y7CisgICAgVkFMVUUgZ2NfcHJvZmlsZSA9IHJiX2FyeV9uZXcoKTsKKyAgICBzaXpl X3QgaTsKKyAgICByYl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9ICgmcmJfb2Jqc3BhY2UpOworICAg IAorICAgIGlmICghcnVieV9nY19wcm9maWxlKSB7CisJcmV0dXJuIFFuaWw7CisgICAgfQorCisg ICAgZm9yIChpID0wOyBpIDwgb2Jqc3BhY2UtPnByb2ZpbGUuY291bnQ7IGkrKykgeworCXByb2Yg PSByYl9oYXNoX25ldygpOworICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2lu dGVybigiR0NfVElNRSIpKSwgRE9VQkxFMk5VTShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmdj X3RpbWUpKTsKKyAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkhF QVBfVVNFX1NJWkUiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmhl YXBfdXNlX3NpemUpKTsKKyAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRl cm4oIkhFQVBfVE9UQUxfU0laRSIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLmRh dGFbaV0uaGVhcF90b3RhbF9zaXplKSk7CisgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJT WU0ocmJfaW50ZXJuKCJIRUFQX1RPVEFMX09CSkVDVFMiKSksIHJiX3VpbnQyaW51bShvYmpzcGFj ZS0+cHJvZmlsZS5kYXRhW2ldLmhlYXBfdG90YWxfb2JqZWN0cykpOworI2lmIEdDX1BST0ZJTEVf TU9SRV9ERVRBSUwKKyAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4o IkdDX01BUktfVElNRSIpKSwgRE9VQkxFMk5VTShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmdj X21hcmtfdGltZSkpOworCXJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJHQ19T V0VFUF9USU1FIikpLCBET1VCTEUyTlVNKG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uZ2Nfc3dl ZXBfdGltZSkpOworICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigi QUxMT0NBVEVfSU5DUkVBU0UiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5kYXRh W2ldLmFsbG9jYXRlX2luY3JlYXNlKSk7CisgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJT WU0ocmJfaW50ZXJuKCJBTExPQ0FURV9MSU1JVCIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5w cm9maWxlLmRhdGFbaV0uYWxsb2NhdGVfbGltaXQpKTsKKyAgICAgICAgcmJfaGFzaF9hc2V0KHBy b2YsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVVNFX1NMT1RTIikpLCByYl91aW50MmludW0ob2Jq c3BhY2UtPnByb2ZpbGUuZGF0YVtpXS5oZWFwX3VzZV9zbG90cykpOworICAgICAgICByYl9oYXNo X2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9MSVZFX09CSkVDVFMiKSksIHJiX3Vp bnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmhlYXBfbGl2ZV9vYmplY3RzKSk7Cisg ICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJIRUFQX0ZSRUVfT0JK RUNUUyIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uaGVhcF9mcmVl X29iamVjdHMpKTsKKyAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4o IkhBVkVfRklOQUxJWkUiKSksIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uaGF2ZV9maW5hbGl6 ZSk7CisjZW5kaWYKKwlyYl9hcnlfcHVzaChnY19wcm9maWxlLCBwcm9mKTsKKyAgICB9CisKKyAg ICByZXR1cm4gZ2NfcHJvZmlsZTsKK30KKworLyoKICAqICBUaGUgPGNvZGU+R0M8L2NvZGU+IG1v ZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gUnVieSdzIG1hcmsgYW5kCiAgKiAgc3dlZXAg Z2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbS4gU29tZSBvZiB0aGUgdW5kZXJseWluZyBtZXRo b2RzCiAgKiAgYXJlIGFsc28gYXZhaWxhYmxlIHZpYSB0aGUgPGNvZGU+T2JqZWN0U3BhY2U8L2Nv ZGU+IG1vZHVsZS4KQEAgLTIzOTYsNiArMjcyNSw3IEBACiBJbml0X0dDKHZvaWQpCiB7CiAgICAg VkFMVUUgcmJfbU9iU3BhY2U7CisgICAgVkFMVUUgcmJfbVByb2ZpbGVyOwogCiAgICAgcmJfbUdD ID0gcmJfZGVmaW5lX21vZHVsZSgiR0MiKTsKICAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhv ZChyYl9tR0MsICJzdGFydCIsIHJiX2djX3N0YXJ0LCAwKTsKQEAgLTI0MDYsNiArMjczNiwxMiBA QAogICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKHJiX21HQywgImNvdW50IiwgZ2NfY291 bnQsIDApOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfbUdDLCAiZ2FyYmFnZV9jb2xsZWN0Iiwg cmJfZ2Nfc3RhcnQsIDApOwogCisgICAgcmJfbVByb2ZpbGVyID0gcmJfZGVmaW5lX21vZHVsZV91 bmRlcihyYl9tR0MsICJQcm9maWxlciIpOworICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9k KHJiX21Qcm9maWxlciwgImVuYWJsZT8iLCBnY19wcm9maWxlX2VuYWJsZV9nZXQsIDApOworICAg IHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKHJiX21Qcm9maWxlciwgImVuYWJsZT0iLCBnY19w cm9maWxlX2VuYWJsZV9zZXQsIDEpOworICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKHJi X21Qcm9maWxlciwgImRpc2FibGU9IiwgZ2NfcHJvZmlsZV9kaXNhYmxlX3NldCwgMSk7CisgICAg cmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QocmJfbVByb2ZpbGVyLCAiZGF0YSIsIGdjX3Byb2Zp bGVfZGF0YV9nZXQsIDApOworCiAgICAgcmJfbU9iU3BhY2UgPSByYl9kZWZpbmVfbW9kdWxlKCJP YmplY3RTcGFjZSIpOwogICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU9iU3BhY2Us ICJlYWNoX29iamVjdCIsIG9zX2VhY2hfb2JqLCAtMSk7CiAgICAgcmJfZGVmaW5lX21vZHVsZV9m dW5jdGlvbihyYl9tT2JTcGFjZSwgImdhcmJhZ2VfY29sbGVjdCIsIHJiX2djX3N0YXJ0LCAwKTsK QEAgLTI0MjUsNiArMjc2MSw3IEBACiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9tS2VybmVsLCAi b2JqZWN0X2lkIiwgcmJfb2JqX2lkLCAwKTsKIAogICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rp b24ocmJfbU9iU3BhY2UsICJjb3VudF9vYmplY3RzIiwgY291bnRfb2JqZWN0cywgLTEpOworICAg IHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbU9iU3BhY2UsICJjb3VudF9jbGFzc2VzIiwg Y291bnRfY2xhc3NlcywgLTEpOwogCiAjaWYgQ0FMQ19FWEFDVF9NQUxMT0NfU0laRQogICAgIHJi X2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKHJiX21HQywgIm1hbGxvY19hbGxvY2F0ZWRfc2l6ZSIs IGdjX21hbGxvY19hbGxvY2F0ZWRfc2l6ZSwgMCk7Cg== ------=_Part_105329_31348362.1216432099280--